From 5a471e286d2378d9b23d2f33d1c3c6538901fe98 Mon Sep 17 00:00:00 2001
From: Daniel HybridNetworks
Date: Wed, 22 Jun 2022 20:26:03 -0300
Subject: [PATCH 01/13] Add Spanish translation
---
src/lang.rs | 2 +
src/lang/es.rs | 283 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 285 insertions(+)
create mode 100644 src/lang/es.rs
diff --git a/src/lang.rs b/src/lang.rs
index c6e522940..4b4998fc1 100644
--- a/src/lang.rs
+++ b/src/lang.rs
@@ -6,6 +6,7 @@ mod da;
mod sk;
mod de;
mod en;
+mod es;
mod eo;
mod fr;
mod id;
@@ -44,6 +45,7 @@ pub fn translate_locale(name: String, locale: &str) -> String {
"it" => it::T.deref(),
"tw" => tw::T.deref(),
"de" => de::T.deref(),
+ "es" => es::T.deref(),
"ru" => ru::T.deref(),
"eo" => eo::T.deref(),
"id" => id::T.deref(),
diff --git a/src/lang/es.rs b/src/lang/es.rs
new file mode 100644
index 000000000..ba4c671a8
--- /dev/null
+++ b/src/lang/es.rs
@@ -0,0 +1,283 @@
+lazy_static::lazy_static! {
+pub static ref T: std::collections::HashMap<&'static str, &'static str> =
+ [
+ ("Status", "Estado"),
+ ("Your Desktop", "Tu escritorio"),
+ ("desk_tip", "Puoi accedere al tuo desktop usando l'ID e la password riportati qui."),
+ ("Password", "Contraseña"),
+ ("Ready", "Listo"),
+ ("Established", "Establecido"),
+ ("connecting_status", "Conexión a la red RustDesk en progreso..."),
+ ("Enable Service", "Habilitar Servicio"),
+ ("Start Service", "Iniciar Servicio"),
+ ("Service is running", "Servicio se está ejecutando"),
+ ("Service is not running", "Servicio no se está ejecutando"),
+ ("not_ready_status", "No está listo. Comprueba tu conexión"),
+ ("Control Remote Desktop", "Controlar Escritorio Remoto"),
+ ("Transfer File", "Transferir archivo"),
+ ("Connect", "Conectar"),
+ ("Recent Sessions", "Sesiones recientes"),
+ ("Address Book", "Directorio"),
+ ("Confirmation", "Confirmación"),
+ ("TCP Tunneling", "Tunel TCP"),
+ ("Remove", "Remover"),
+ ("Refresh random password", "Actualizar contraseña aleatoria"),
+ ("Set your own password", "Establece tu propia contraseña"),
+ ("Enable Keyboard/Mouse", "Habilitar teclado/ratón"),
+ ("Enable Clipboard", "Habilitar portapapeles"),
+ ("Enable File Transfer", "Habilitar transferencia de archivos"),
+ ("Enable TCP Tunneling", "Habilitar tunel TCP"),
+ ("IP Whitelisting", "Lista blanca IP"),
+ ("ID/Relay Server", "Servidor de ID/Relay"),
+ ("Stop service", "Parar servicio"),
+ ("Change ID", "Cambiar identificación"),
+ ("Website", "Sitio web"),
+ ("About", "Sobre"),
+ ("Mute", "Silencio"),
+ ("Audio Input", "Entrada de audio"),
+ ("ID Server", "ID server"),
+ ("Relay Server", "Server relay"),
+ ("API Server", "Server API"),
+ ("invalid_http", "debe comenzar con http:// o https://"),
+ ("Invalid IP", "IP inválida"),
+ ("id_change_tip", "Solo puedes usar caracteres a-z, A-Z, 0-9 e _ (guion bajo). El primer carácter debe ser a-z o A-Z. La longitud debe estar entre 6 a 16 caracteres."),
+ ("Invalid format", "Formato inválido"),
+ ("server_not_support", "Aún no es compatible con el servidor"),
+ ("Not available", "Indisponible"),
+ ("Too frequent", "Demasiado frecuente"),
+ ("Cancel", "Cancelar"),
+ ("Skip", "Saltar"),
+ ("Close", "Cerrar"),
+ ("Retry", "Volver"),
+ ("OK", "OK"),
+ ("Password Required", "Se requiere contraseña"),
+ ("Please enter your password", "Por favor, introduzca su contraseña"),
+ ("Remember password", "Recordar contraseña"),
+ ("Wrong Password", "Contraseña incorrecta"),
+ ("Do you want to enter again?", "Quieres volver a entrar?"),
+ ("Connection Error", "Error de conexión"),
+ ("Error", "Error"),
+ ("Reset by the peer", "Restablecido por el par"),
+ ("Connecting...", "Conectando..."),
+ ("Connection in progress. Please wait.", "Conexión en curso. Espere por favor."),
+ ("Please try 1 minute later", "Intente 1 minuto más tarde"),
+ ("Login Error", "Error de inicio de sesión"),
+ ("Successful", "Exitoso"),
+ ("Connected, waiting for image...", "Conectado, esperando imagen..."),
+ ("Name", "Nombre"),
+ ("Type", "Tipo"),
+ ("Modified", "Modificado"),
+ ("Size", "Tamaño"),
+ ("Show Hidden Files", "Mostrar archivos ocultos"),
+ ("Receive", "Recibir"),
+ ("Send", "Enviar"),
+ ("Refresh File", "Actualizar archivo"),
+ ("Local", "Local"),
+ ("Remote", "Remoto"),
+ ("Remote Computer", "Computadora remota"),
+ ("Local Computer", "Computadora local"),
+ ("Confirm Delete", "Confirmar eliminación"),
+ ("Delete", "Borrar"),
+ ("Properties", "Propiedades"),
+ ("Multi Select", "Selección múltiple"),
+ ("Empty Directory", "Directorio vacío"),
+ ("Not an empty directory", "No es un directorio vacío"),
+ ("Are you sure you want to delete this file?", "Estás seguro de que quieres eliminar este archivo?"),
+ ("Are you sure you want to delete this empty directory?", "Está seguro de que desea eliminar este directorio vacío?"),
+ ("Are you sure you want to delete the file of this directory?", "Está seguro de que desea eliminar el archivo de este directorio?"),
+ ("Do this for all conflicts", "Haga esto para todos los conflictos"),
+ ("This is irreversible!", "Esto es irreversible!"),
+ ("Deleting", "Borrando"),
+ ("files", "archivos"),
+ ("Waiting", "Esperando"),
+ ("Finished", "Acabado"),
+ ("Speed", "Velocidad"),
+ ("Custom Image Quality", "Calidad de imagen personalizada"),
+ ("Privacy mode", "Modo privado"),
+ ("Block user input", "Bloquear entrada de usuario"),
+ ("Unblock user input", "Desbloquear entrada de usuario"),
+ ("Adjust Window", "Ajustar ventana"),
+ ("Original", "Original"),
+ ("Shrink", "Encogerse"),
+ ("Stretch", "Estirar"),
+ ("Good image quality", "Buena calidad de imagen"),
+ ("Balanced", "Equilibrado"),
+ ("Optimize reaction time", "Optimizar el tiempo de reacción"),
+ ("Custom", "Personalizado"),
+ ("Show remote cursor", "Mostrar cursor remoto"),
+ ("Disable clipboard", "Deshabilitar portapapeles"),
+ ("Lock after session end", "Bloquear después del final de la sesión"),
+ ("Insert", "Insertar"),
+ ("Insert Lock", "Insertar bloqueo"),
+ ("Refresh", "Actualizar"),
+ ("ID does not exist", "ID no existe"),
+ ("Failed to connect to rendezvous server", "No se pudo conectar al servidor de encuentro"),
+ ("Please try later", "Por favor intente mas tarde"),
+ ("Remote desktop is offline", "El escritorio remoto está fuera de línea"),
+ ("Key mismatch", "La clave no coincide"),
+ ("Timeout", "Timeout"),
+ ("Failed to connect to relay server", "No se pudo conectar al servidor de retransmisión"),
+ ("Failed to connect via rendezvous server", "No se pudo conectar a través del servidor de encuentro"),
+ ("Failed to connect via relay server", "No se pudo conectar a través del servidor de retransmisión"),
+ ("Failed to make direct connection to remote desktop", "No se pudo establecer la conexión directa con el escritorio remoto"),
+ ("Set Password", "Configurar la clave"),
+ ("OS Password", "Contraseña del sistema operativo"),
+ ("install_tip", "Debido al Control de cuentas de usuario, es posible que RustDesk no funcione correctamente como escritorio remoto. Para evitar este problema, haga clic en el botón de abajo para instalar RustDesk a nivel de sistema."),
+ ("Click to upgrade", "Clic para actualizar"),
+ ("Click to download", "Clic para descargar"),
+ ("Click to update", "Fare clic per aggiornare"),
+ ("Configure", "Configurar"),
+ ("config_acc", "Para controlar su escritorio desde el exterior, debe otorgar permiso a RustDesk de \"Accesibilidad\"."),
+ ("config_screen", "Para controlar su escritorio desde el exterior, debe otorgar permiso a RustDesk de \"Grabación de pantalla\"."),
+ ("Installing ...", "Instalando ..."),
+ ("Install", "Instalar"),
+ ("Installation", "Instalación"),
+ ("Installation Path", "Ruta de instalación"),
+ ("Create start menu shortcuts", "Crear accesos directos al menú de inicio"),
+ ("Create desktop icon", "Crear icono de escritorio"),
+ ("agreement_tip", "Al iniciar la instalación, acepta los términos del acuerdo de licencia."),
+ ("Accept and Install", "Aceptar e instalar"),
+ ("End-user license agreement", "Acuerdo de licencia de usuario final"),
+ ("Generating ...", "Generando ..."),
+ ("Your installation is lower version.", "Su instalación es una versión inferior."),
+ ("not_close_tcp_tip", "No cierre esta ventana mientras esté usando el túnel"),
+ ("Listening ...", "Escuchando ..."),
+ ("Remote Host", "Servidor remoto"),
+ ("Remote Port", "Puerto remoto"),
+ ("Action", "Acción"),
+ ("Add", "Agregar"),
+ ("Local Port", "Puerto local"),
+ ("setup_server_tip", "Para una conexión más rápida, configure su propio servidor"),
+ ("Too short, at least 6 characters.", "Demasiado corto, al menos 6 caracteres."),
+ ("The confirmation is not identical.", "La confirmación no es idéntica."),
+ ("Permissions", "Permisos"),
+ ("Accept", "Aceptar"),
+ ("Dismiss", "Cancelar"),
+ ("Disconnect", "Desconectar"),
+ ("Allow using keyboard and mouse", "Permitir el uso del teclado y el mouse"),
+ ("Allow using clipboard", "Permitir usar portapapeles"),
+ ("Allow hearing sound", "Permitir escuchar sonido"),
+ ("Allow file copy and paste", "Permitir copiar y pegar archivos"),
+ ("Connected", "Conectado"),
+ ("Direct and encrypted connection", "Conexión directa y encriptada"),
+ ("Relayed and encrypted connection", "Conexión retransmitida y cifrada"),
+ ("Direct and unencrypted connection", "Conexión directa y sin cifrar"),
+ ("Relayed and unencrypted connection", "Conexión retransmitida y sin cifrar"),
+ ("Enter Remote ID", "Ingrese el ID remoto"),
+ ("Enter your password", "Ingrese su contraseña"),
+ ("Logging in...", "Iniciando sesión..."),
+ ("Enable RDP session sharing", "Habilitar el uso compartido de sesiones RDP"),
+ ("Auto Login", "Ingreso automático"),
+ ("Enable Direct IP Access", "Habilitar acceso IP directo"),
+ ("Rename", "Renombrar"),
+ ("Space", "Espacio"),
+ ("Create Desktop Shortcut", "Crear acceso directo del escritorio"),
+ ("Change Path", "Cambiar ruta"),
+ ("Create Folder", "Crear carpeta"),
+ ("Please enter the folder name", "Por favor ingrese el nombre de la carpeta"),
+ ("Fix it", "Resolver"),
+ ("Warning", "Aviso"),
+ ("Login screen using Wayland is not supported", "La pantalla de inicio de sesión con Wayland no es compatible"),
+ ("Reboot required", "Reinicio requerido"),
+ ("Unsupported display server ", "Servidor de visualización no compatible"),
+ ("x11 expected", "x11 necesario"),
+ ("Port", "Puerto"),
+ ("Settings", "Ajustes"),
+ ("Username", " Nombre de usuario"),
+ ("Invalid port", "Puerto inválido"),
+ ("Closed manually by the peer", "Cerrado manualmente por el par"),
+ ("Enable remote configuration modification", "Habilitar modificación de configuración remota"),
+ ("Run without install", "Ejecutar sin instalar"),
+ ("Always connected via relay", "Siempre conectado a través de relay"),
+ ("Always connect via relay", "Conéctese siempre a través de relay"),
+ ("whitelist_tip", "Solo las direcciones IP autorizadas pueden conectarse a este escritorio"),
+ ("Login", "Iniciar sesión"),
+ ("Logout", "Salir"),
+ ("Tags", "Tags"),
+ ("Search ID", "Buscar ID"),
+ ("Current Wayland display server is not supported", "El servidor de visualización actual de Wayland no es compatible"),
+ ("whitelist_sep", "Separados por coma, punto y coma, espacio o nueva línea"),
+ ("Add ID", "Agregar ID"),
+ ("Add Tag", "Agregar tag"),
+ ("Unselect all tags", "Deseleccionar todos los tags"),
+ ("Network error", "Error de red"),
+ ("Username missed", "Olvidó su nombre de usuario"),
+ ("Password missed", "Olvidó su contraseña"),
+ ("Wrong credentials", "Credenciales incorrectas"),
+ ("Edit Tag", "Editar tag"),
+ ("Unremember Password", "Olvidaste tu contraseña"),
+ ("Favorites", "Favoritos"),
+ ("Add to Favorites", "Agregar a favoritos"),
+ ("Remove from Favorites", "Quitar de favoritos"),
+ ("Empty", "Vacío"),
+ ("Invalid folder name", "Nombre de carpeta no válido"),
+ ("Socks5 Proxy", "Proxy Socks5"),
+ ("Hostname", "Nombre de host"),
+ ("Discovered", "Descubierto"),
+ ("install_daemon_tip", "Para comenzar en el encendido, debe instalar el servicio del sistema."),
+ ("Remote ID", "ID remoto"),
+ ("Paste", "Pegar"),
+ ("Paste here?", "Pegar aqui?"),
+ ("Are you sure to close the connection?", "Estás seguro de cerrar la conexión?"),
+ ("Download new version", "Descargar nueva versión"),
+ ("Touch mode", "Modo táctil"),
+ ("Mouse mode", "Modo ratón"),
+ ("One-Finger Tap", "Toque con un dedo"),
+ ("Left Mouse", "Ratón izquierdo"),
+ ("One-Long Tap", "Un toque largo"),
+ ("Two-Finger Tap", "Toque con dos dedos"),
+ ("Right Mouse", "Botón derecho"),
+ ("One-Finger Move", "Movimiento con un dedo"),
+ ("Double Tap & Move", "Toca dos veces y mueve"),
+ ("Mouse Drag", "Arrastre de ratón"),
+ ("Three-Finger vertically", "Tres dedos verticalmente"),
+ ("Mouse Wheel", "Rueda de ratón"),
+ ("Two-Finger Move", "Movimiento con dos dedos"),
+ ("Canvas Move", "Movimiento de lienzo"),
+ ("Pinch to Zoom", "Pellizcar para ampliar"),
+ ("Canvas Zoom", "Ampliar lienzo"),
+ ("Reset canvas", "Restablecer lienzo"),
+ ("No permission of file transfer", "Sin permiso de transferencia de archivos"),
+ ("Note", "Nota"),
+ ("Connection", "Conexión"),
+ ("Share Screen", "Compartir pantalla"),
+ ("CLOSE", "CERRAR"),
+ ("OPEN", "ABRIR"),
+ ("Chat", "Chat"),
+ ("Total", "Total"),
+ ("items", "items"),
+ ("Selected", "Seleccionado"),
+ ("Screen Capture", "Captura de pantalla"),
+ ("Input Control", "Control de entrada"),
+ ("Audio Capture", "Captura de audio"),
+ ("File Connection", "Conexión de archivos"),
+ ("Screen Connection", "Conexión de pantalla"),
+ ("Do you accept?", "Aceptas?"),
+ ("Open System Setting", "Configuración del sistema abierto"),
+ ("How to get Android input permission?", "Cómo obtener el permiso de entrada de Android?"),
+ ("android_input_permission_tip1", "Para que un dispositivo remoto controle su dispositivo Android a través del mouse o toque, debe permitir que RustDesk use el servicio de \"Accesibilidad\"."),
+ ("android_input_permission_tip2", "Vaya a la página de configuración del sistema que se abrirá a continuación, busque y acceda a [Servicios instalados], active el servicio [RustDesk Input]."),
+ ("android_new_connection_tip", "Se recibió una nueva solicitud de control para el dispositivo actual."),
+ ("android_service_will_start_tip", "Habilitar la captura de pantalla iniciará automáticamente el servicio, lo que permitirá que otros dispositivos soliciten una conexión desde este dispositivo."),
+ ("android_stop_service_tip", "Cerrar el servicio cerrará automáticamente todas las conexiones establecidas."),
+ ("android_version_audio_tip", "La versión actual de Android no admite la captura de audio, actualice a Android 10 o posterior."),
+ ("android_start_service_tip", "Toque el permiso [Iniciar servicio] o ABRIR [Captura de pantalla] para iniciar el servicio de uso compartido de pantalla."),
+ ("Account", "Cuenta"),
+ ("Overwrite", "Sobrescribir"),
+ ("This file exists, skip or overwrite this file?", "Este archivo existe, ¿omitir o sobrescribir este archivo?"),
+ ("Quit", "Salir"),
+ ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
+ ("Help", "Ayuda"),
+ ("Failed", "Fallido"),
+ ("Succeeded", "Logrado"),
+ ("Someone turns on privacy mode, exit", "Alguien active el modo privacidad, salga"),
+ ("Unsupported", "No soportado"),
+ ("Peer denied", "Par negado"),
+ ("Please install plugins", "Instale complementos"),
+ ("Peer exit", "Par salio"),
+ ("Failed to turn off", "Error al apagar"),
+ ("Turned off", "Apagado"),
+ ("In privacy mode", "En modo de privacidad"),
+ ("Out privacy mode", "Fuera del modo de privacidad"),
+ ].iter().cloned().collect();
+}
From 047111fcc9bc0a4533de65fa9b916bc3b656463d Mon Sep 17 00:00:00 2001
From: Daniel HybridNetworks
Date: Wed, 22 Jun 2022 20:51:49 -0300
Subject: [PATCH 02/13] Update README-ES.md
---
README-ES.md | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/README-ES.md b/README-ES.md
index 1c0b5dd7b..ce8601fa0 100644
--- a/README-ES.md
+++ b/README-ES.md
@@ -5,11 +5,11 @@
Docker •
Estructura •
Captura de pantalla
- [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
+ [česky] | [中文] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي]
Necesitamos tu ayuda para traducir este README a tu idioma
-Chat with us: [Discord](https://discord.gg/nDceKgxnkV) | [Reddit](https://www.reddit.com/r/rustdesk)
+Chatea con nosotros: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
[](https://ko-fi.com/I2I04VU09)
@@ -23,9 +23,11 @@ RustDesk agradece la contribución de todo el mundo. Ve [`CONTRIBUTING.md`](CONT
A continuación se muestran los servidores que está utilizando de forma gratuita, puede cambiar en algún momento. Si no estás cerca de uno de ellos, tu red puede ser lenta.
-- Seoul, AWS lightsail, 1 VCPU/0.5G RAM
-- Singapore, Vultr, 1 VCPU/1G RAM
-- Dallas, Vultr, 1 VCPU/1G RAM
+| Ubicación | Vendedor | Especificación |
+| --------- | ------------- | ------------------ |
+| Seoul | AWS lightsail | 1 VCPU / 0.5GB RAM |
+| Singapore | Vultr | 1 VCPU / 1GB RAM |
+| Dallas | Vultr | 1 VCPU / 1GB RAM | |
## Dependencies
@@ -37,7 +39,7 @@ La versión Desktop usa [sciter](https://sciter.com/) para GUI, por favor bajate
## Pasos para compilar desde el inicio
-- Prepara el entono de desarrollode Rust y el entorno de compilación de C++ y Rust.
+- Prepara el entono de desarrollo de Rust y el entorno de compilación de C++ y Rust.
- Instala [vcpkg](https://github.com/microsoft/vcpkg), y configura la variable de entono `VCPKG_ROOT` correctamente.
@@ -78,7 +80,7 @@ export VCPKG_ROOT=$HOME/vcpkg
vcpkg/vcpkg install libvpx libyuv opus
```
-### Soluciona libvpx (For Fedora)
+### Soluciona libvpx (Para Fedora)
```sh
cd vcpkg/buildtrees/libvpx/src
@@ -124,7 +126,7 @@ Entonces, cada vez que necesites compilar una modificación, ejecuta el siguient
docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder
```
-Ten en cuenta que la primera compilación puede tardar más tiempo antes de que las dependencias se almacenen en la caché, las siguientes compilaciones serán más rápidas. Además, si necesitas especificar diferentes argumentos a la orden de compilación, puede hacerlo al final de la linea de comandos en el apartado``. Por ejemplo, si desea compilar una versión optimizada para publicación, deberá ejecutar el comando anterior seguido de `--release`. El ejecutable resultante estará disponible en la carpeta de destino en su sistema, y puede ser ejecutado con:
+Ten en cuenta que la primera compilación puede tardar más tiempo antes de que las dependencias se almacenen en la caché, las siguientes compilaciones serán más rápidas. Además, si necesitas especificar diferentes argumentos a la orden de compilación, puede hacerlo al final de la linea de comandos en el apartado ``. Por ejemplo, si desea compilar una versión optimizada para publicación, deberá ejecutar el comando anterior seguido de `--release`. El ejecutable resultante estará disponible en la carpeta de destino en su sistema, y puede ser ejecutado con:
```sh
target/debug/rustdesk
@@ -148,6 +150,8 @@ Por favor, asegurate de que estás ejecutando estos comandos desde la raíz del
- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: iniciar una conexión "peer to peer"
- **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: Comunicación con [rustdesk-server](https://github.com/rustdesk/rustdesk-server), esperar la conexión remota directa ("TCP hole punching") o conexión indirecta ("relayed")
- **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: código específico de cada plataforma
+- **[flutter](https://github.com/rustdesk/rustdesk/tree/master/flutter)**: Flutter, código para moviles
+- **[flutter/web/js](https://github.com/rustdesk/rustdesk/tree/master/flutter/web/js)**: Javascript para cliente web Flutter
## Captura de pantalla
From d968ed302979c2523952fcd3cb9678864c4a11b1 Mon Sep 17 00:00:00 2001
From: fufesou
Date: Thu, 23 Jun 2022 10:29:22 +0800
Subject: [PATCH 03/13] socks5_reconnect: handle socks5 server down
Signed-off-by: fufesou
---
src/rendezvous_mediator.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs
index f575f684f..b332c69c9 100644
--- a/src/rendezvous_mediator.rs
+++ b/src/rendezvous_mediator.rs
@@ -216,7 +216,7 @@ impl RendezvousMediator {
},
Some(Err(e)) => bail!("Failed to receive next {}", e), // maybe socks5 tcp disconnected
None => {
- // unreachable!()
+ bail!("Socket receive none. Maybe socks5 server is down.");
},
}
},
From ef1f34cefabc1a93cc1b980a1059e016d5004dfb Mon Sep 17 00:00:00 2001
From: rustdesk
Date: Thu, 23 Jun 2022 11:15:37 +0800
Subject: [PATCH 04/13] update dep
---
Cargo.lock | 148 ++++++++++++++++++++++++-----------------------------
1 file changed, 68 insertions(+), 80 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 02260e9fa..c55c906fc 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -123,9 +123,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.57"
+version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
[[package]]
name = "arboard"
@@ -455,7 +455,7 @@ version = "0.24.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6358dedf60f4d9b8db43ad187391afe959746101346fe51bb978126bec61dfb"
dependencies = [
- "clap 3.1.18",
+ "clap 3.2.6",
"heck 0.4.0",
"indexmap",
"log",
@@ -553,9 +553,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "3.1.18"
+version = "3.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
+checksum = "9f1fe12880bae935d142c8702d500c63a4e8634b6c3c57ad72bf978fc7b6249a"
dependencies = [
"atty",
"bitflags",
@@ -568,9 +568,9 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.2.0"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213"
+checksum = "87eba3c8c7f42ef17f6c659fc7416d0f4758cd3e58861ee63c5fa4a4dde649e4"
dependencies = [
"os_str_bytes",
]
@@ -876,9 +876,9 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53"
+checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c"
dependencies = [
"cfg-if 1.0.0",
"crossbeam-utils",
@@ -897,15 +897,15 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
-version = "0.9.8"
+version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
+checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d"
dependencies = [
"autocfg 1.1.0",
"cfg-if 1.0.0",
"crossbeam-utils",
- "lazy_static",
"memoffset",
+ "once_cell",
"scopeguard",
]
@@ -921,12 +921,12 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
+checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978"
dependencies = [
"cfg-if 1.0.0",
- "lazy_static",
+ "once_cell",
]
[[package]]
@@ -1751,13 +1751,13 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.6"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
dependencies = [
"cfg-if 1.0.0",
"libc",
- "wasi 0.10.2+wasi-snapshot-preview1",
+ "wasi",
]
[[package]]
@@ -2123,9 +2123,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.11.2"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
[[package]]
name = "hbb_common"
@@ -2322,9 +2322,9 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "1.8.2"
+version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
dependencies = [
"autocfg 1.1.0",
"hashbrown",
@@ -2412,9 +2412,9 @@ checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
[[package]]
name = "js-sys"
-version = "0.3.57"
+version = "0.3.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397"
+checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
dependencies = [
"wasm-bindgen",
]
@@ -2744,13 +2744,13 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
+checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
dependencies = [
"libc",
"log",
- "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasi",
"windows-sys 0.36.1",
]
@@ -3008,9 +3008,9 @@ dependencies = [
[[package]]
name = "num-complex"
-version = "0.4.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790"
+checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19"
dependencies = [
"num-traits 0.2.15",
]
@@ -3504,9 +3504,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.39"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
dependencies = [
"unicode-ident",
]
@@ -3635,9 +3635,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.18"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
dependencies = [
"proc-macro2",
]
@@ -3912,9 +3912,9 @@ dependencies = [
[[package]]
name = "reqwest"
-version = "0.11.10"
+version = "0.11.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb"
+checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92"
dependencies = [
"base64",
"bytes",
@@ -3934,12 +3934,13 @@ dependencies = [
"percent-encoding",
"pin-project-lite",
"rustls",
- "rustls-pemfile 0.3.0",
+ "rustls-pemfile 1.0.0",
"serde 1.0.137",
"serde_json 1.0.81",
"serde_urlencoded",
"tokio",
"tokio-rustls",
+ "tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
@@ -4048,7 +4049,7 @@ dependencies = [
"base64",
"cc",
"cfg-if 1.0.0",
- "clap 3.1.18",
+ "clap 3.2.6",
"clipboard",
"cocoa 0.24.0",
"core-foundation 0.9.3",
@@ -4151,15 +4152,6 @@ dependencies = [
"base64",
]
-[[package]]
-name = "rustls-pemfile"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360"
-dependencies = [
- "base64",
-]
-
[[package]]
name = "rustls-pemfile"
version = "1.0.0"
@@ -4181,9 +4173,9 @@ dependencies = [
[[package]]
name = "rustversion"
-version = "1.0.6"
+version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf"
[[package]]
name = "ryu"
@@ -4612,9 +4604,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "1.0.96"
+version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
dependencies = [
"proc-macro2",
"quote",
@@ -4635,13 +4627,15 @@ dependencies = [
[[package]]
name = "sys-locale"
-version = "0.2.0"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3913c5a3d30054d7f77cf07cdd800c8103ace15c6e44437c5db66a43dd3a92cf"
+checksum = "658ee915b6c7b73ec4c1ffcd838506b5c5a4087eadc1ec8f862f1066cf2c8132"
dependencies = [
"cc",
"cstr_core",
+ "js-sys",
"libc",
+ "wasm-bindgen",
"web-sys",
"winapi 0.3.9",
]
@@ -4789,9 +4783,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.9"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd"
+checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217"
dependencies = [
"itoa 1.0.2",
"libc",
@@ -4829,7 +4823,7 @@ dependencies = [
"bytes",
"libc",
"memchr",
- "mio 0.8.3",
+ "mio 0.8.4",
"num_cpus",
"once_cell",
"parking_lot 0.12.1",
@@ -4865,7 +4859,7 @@ dependencies = [
[[package]]
name = "tokio-socks"
version = "0.5.1"
-source = "git+https://github.com/open-trade/tokio-socks#3de8300fbce37e2cdaef042e016aa95058d007cf"
+source = "git+https://github.com/open-trade/tokio-socks#c34272f219b24dc6508f13fa81eff9850e616ce2"
dependencies = [
"bytes",
"either",
@@ -4919,9 +4913,9 @@ dependencies = [
[[package]]
name = "tower-service"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
@@ -5025,9 +5019,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
[[package]]
name = "unicode-ident"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
[[package]]
name = "unicode-normalization"
@@ -5146,12 +5140,6 @@ dependencies = [
"try-lock",
]
-[[package]]
-name = "wasi"
-version = "0.10.2+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
@@ -5160,9 +5148,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad"
+checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
dependencies = [
"cfg-if 1.0.0",
"wasm-bindgen-macro",
@@ -5170,9 +5158,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4"
+checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
dependencies = [
"bumpalo",
"lazy_static",
@@ -5185,9 +5173,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.30"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2"
+checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
dependencies = [
"cfg-if 1.0.0",
"js-sys",
@@ -5197,9 +5185,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5"
+checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -5207,9 +5195,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b"
+checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
dependencies = [
"proc-macro2",
"quote",
@@ -5220,9 +5208,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744"
+checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
[[package]]
name = "wayland-client"
@@ -5299,9 +5287,9 @@ dependencies = [
[[package]]
name = "web-sys"
-version = "0.3.57"
+version = "0.3.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"
+checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
dependencies = [
"js-sys",
"wasm-bindgen",
From 27851afc55078716bb6d431d5c7d0af91e98c27f Mon Sep 17 00:00:00 2001
From: RustDesk <71636191+rustdesk@users.noreply.github.com>
Date: Thu, 23 Jun 2022 13:33:36 +0800
Subject: [PATCH 05/13] Update README.md
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index 613e425e2..1faf6b7cf 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,9 @@
Chat with us: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
+[
](https://f-droid.org/en/packages/com.carriez.flutter_hbb)
[](https://ko-fi.com/I2I04VU09)
From aaedcd6ac85a0c8a2b7bc21702cea602ac7fd405 Mon Sep 17 00:00:00 2001
From: RustDesk <71636191+rustdesk@users.noreply.github.com>
Date: Thu, 23 Jun 2022 13:46:15 +0800
Subject: [PATCH 06/13] Update README.md
---
README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 1faf6b7cf..2166073a7 100644
--- a/README.md
+++ b/README.md
@@ -11,10 +11,6 @@
Chat with us: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
-[
](https://f-droid.org/en/packages/com.carriez.flutter_hbb)
-
[](https://ko-fi.com/I2I04VU09)
Yet another remote desktop software, written in Rust. Works out of the box, no configuration required. You have full control of your data, with no concerns about security. You can use our rendezvous/relay server, [set up your own](https://rustdesk.com/server), or [write your own rendezvous/relay server](https://github.com/rustdesk/rustdesk-server-demo).
@@ -27,6 +23,10 @@ RustDesk welcomes contribution from everyone. See [`CONTRIBUTING.md`](CONTRIBUTI
[**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases)
+[
](https://f-droid.org/en/packages/com.carriez.flutter_hbb)
+
## Free Public Servers
Below are the servers you are using for free, it may change along the time. If you are not close to one of these, your network may be slow.
From 1833b8c2dce9849953bd9cf63a1af791799a8f9f Mon Sep 17 00:00:00 2001
From: Asura
Date: Thu, 23 Jun 2022 01:06:30 -0700
Subject: [PATCH 07/13] fix(pynput): Convert keysym to keycode according to the
system input source
---
pynput_service.py | 58 ++++++++++-------------------------------------
1 file changed, 12 insertions(+), 46 deletions(-)
diff --git a/pynput_service.py b/pynput_service.py
index d8df09e96..30bdd90f9 100644
--- a/pynput_service.py
+++ b/pynput_service.py
@@ -1,65 +1,32 @@
from pynput.keyboard import Key, Controller
from pynput.keyboard._xorg import KeyCode
from pynput._util.xorg import display_manager
-import Xlib
import os
import sys
import socket
+from Xlib.ext.xtest import fake_input
+from Xlib import X
KeyCode._from_symbol("\0") # test
+
class MyController(Controller):
def _handle(self, key, is_press):
"""Resolves a key identifier and sends a keyboard event.
:param event: The *X* keyboard event.
:param int keysym: The keysym to handle.
"""
- event = Xlib.display.event.KeyPress if is_press \
- else Xlib.display.event.KeyRelease
+ event = X.KeyPress if is_press \
+ else X.KeyRelease
+
keysym = self._keysym(key)
+ # Get keycode according to system language
+ keycode = self._display.keysym_to_keycode(keysym)
+ print(keycode)
- # Make sure to verify that the key was resolved
- if keysym is None:
- raise self.InvalidKeyException(key)
+ fake_input(self._display, event, keycode)
+ self._display.sync()
- # If the key has a virtual key code, use that immediately with
- # fake_input; fake input,being an X server extension, has access to
- # more internal state that we do
- if key.vk is not None:
- with display_manager(self._display) as dm:
- Xlib.ext.xtest.fake_input(
- dm,
- Xlib.X.KeyPress if is_press else Xlib.X.KeyRelease,
- dm.keysym_to_keycode(key.vk))
-
- # Otherwise use XSendEvent; we need to use this in the general case to
- # work around problems with keyboard layouts
- else:
- try:
- keycode, shift_state = self.keyboard_mapping[keysym]
- with self.modifiers as modifiers:
- alt_gr = Key.alt_gr in modifiers
- if alt_gr:
- self._send_key(event, keycode, shift_state)
- else:
- with display_manager(self._display) as dm:
- Xlib.ext.xtest.fake_input(
- dm,
- Xlib.X.KeyPress if is_press else Xlib.X.KeyRelease,
- keycode)
-
- except KeyError:
- with self._borrow_lock:
- keycode, index, count = self._borrows[keysym]
- self._send_key(
- event,
- keycode,
- index_to_shift(self._display, index))
- count += 1 if is_press else -1
- self._borrows[keysym] = (keycode, index, count)
-
- # Notify any running listeners
- self._emit('_on_fake_event', key, is_press)
keyboard = MyController()
@@ -77,7 +44,7 @@ server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.bind(server_address)
server.listen(1)
clientsocket, address = server.accept()
-os.system('chmod a+rw %s'%server_address)
+os.system('chmod a+rw %s' % server_address)
print("Got pynput connection")
@@ -121,4 +88,3 @@ def loop():
loop()
clientsocket.close()
server.close()
-
From 8aeacf77b3faf3f54e66b205875d5ab618c97924 Mon Sep 17 00:00:00 2001
From: Asura <99897242+asur4s@users.noreply.github.com>
Date: Thu, 23 Jun 2022 19:27:10 +0800
Subject: [PATCH 08/13] fix: remove print
---
pynput_service.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/pynput_service.py b/pynput_service.py
index 30bdd90f9..382df9bed 100644
--- a/pynput_service.py
+++ b/pynput_service.py
@@ -22,7 +22,6 @@ class MyController(Controller):
keysym = self._keysym(key)
# Get keycode according to system language
keycode = self._display.keysym_to_keycode(keysym)
- print(keycode)
fake_input(self._display, event, keycode)
self._display.sync()
From 649ff52970c7a077cfe9a0aa404dca4e3d22534a Mon Sep 17 00:00:00 2001
From: rustdesk
Date: Fri, 24 Jun 2022 02:47:46 +0800
Subject: [PATCH 09/13] https://github.com/rustdesk/rustdesk/issues/751
---
src/rendezvous_mediator.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs
index b332c69c9..a7f90b977 100644
--- a/src/rendezvous_mediator.rs
+++ b/src/rendezvous_mediator.rs
@@ -231,7 +231,7 @@ impl RendezvousMediator {
}
last_timer = now;
let elapsed_resp = last_register_resp.map(|x| x.elapsed().as_millis() as i64).unwrap_or(REG_INTERVAL);
- let timeout = (last_register_sent.map(|x| x.elapsed().as_millis() as i64).unwrap_or(REG_INTERVAL) - elapsed_resp) > REG_TIMEOUT;
+ let timeout = (elapsed_resp - last_register_sent.map(|x| x.elapsed().as_millis() as i64).unwrap_or(REG_INTERVAL)) > REG_TIMEOUT;
if timeout || elapsed_resp >= REG_INTERVAL {
allow_err!(rz.register_peer(&mut socket).await);
last_register_sent = now;
From c842642c026a948257caf2a6e43a7f187ab6084e Mon Sep 17 00:00:00 2001
From: Asura <99897242+asur4s@users.noreply.github.com>
Date: Fri, 24 Jun 2022 12:01:22 +0800
Subject: [PATCH 10/13] Replaced fake_input with display_manager's send_event
---
pynput_service.py | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/pynput_service.py b/pynput_service.py
index 382df9bed..24edcc1f9 100644
--- a/pynput_service.py
+++ b/pynput_service.py
@@ -6,6 +6,7 @@ import sys
import socket
from Xlib.ext.xtest import fake_input
from Xlib import X
+import Xlib
KeyCode._from_symbol("\0") # test
@@ -16,15 +17,31 @@ class MyController(Controller):
:param event: The *X* keyboard event.
:param int keysym: The keysym to handle.
"""
- event = X.KeyPress if is_press \
- else X.KeyRelease
- keysym = self._keysym(key)
- # Get keycode according to system language
- keycode = self._display.keysym_to_keycode(keysym)
+ event = Xlib.display.event.KeyPress if is_press \
+ else Xlib.display.event.KeyRelease
+
+ origin_keysym = self._keysym(key)
+ keycode = self._display.keysym_to_keycode(origin_keysym)
+
+ with display_manager(self._display) as dm, self.modifiers as modifiers:
+ # Under certain cimcumstances, such as when running under Xephyr,
+ # the value returned by dm.get_input_focus is an int
+ window = dm.get_input_focus().focus
+ send_event = getattr(
+ window,
+ 'send_event',
+ lambda event: dm.send_event(window, event))
+ send_event(event(
+ detail=keycode,
+ state=self._shift_mask(modifiers),
+ time=0,
+ root=dm.screen().root,
+ window=window,
+ same_screen=0,
+ child=Xlib.X.NONE,
+ root_x=0, root_y=0, event_x=0, event_y=0))
- fake_input(self._display, event, keycode)
- self._display.sync()
keyboard = MyController()
From 2ef9a9b8428a3903ebf5d097d88cae0894b515fb Mon Sep 17 00:00:00 2001
From: rustdesk
Date: Sat, 25 Jun 2022 02:44:19 +0800
Subject: [PATCH 11/13] upgrade seria
---
libs/hbb_common/src/config.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs
index 1c14be303..cf3d669dc 100644
--- a/libs/hbb_common/src/config.rs
+++ b/libs/hbb_common/src/config.rs
@@ -16,7 +16,7 @@ pub const RENDEZVOUS_TIMEOUT: u64 = 12_000;
pub const CONNECT_TIMEOUT: u64 = 18_000;
pub const REG_INTERVAL: i64 = 12_000;
pub const COMPRESS_LEVEL: i32 = 3;
-const SERIAL: i32 = 1;
+const SERIAL: i32 = 3;
// 128x128
#[cfg(target_os = "macos")] // 128x128 on 160x160 canvas, then shrink to 128, mac looks better with padding
pub const ICON: &str = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAyVBMVEUAAAAAcf8Acf8Acf8Acv8Acf8Acf8Acf8Acf8AcP8Acf8Ab/8AcP8Acf////8AaP/z+f/o8v/k7v/5/v/T5f8AYP/u9v/X6f+hx/+Kuv95pP8Aef/B1/+TwP9xoP8BdP/g6P+Irv9ZmP8Bgf/E3f98q/9sn/+01f+Es/9nm/9Jif8hhv8off/M4P+syP+avP86iP/c7f+xy/9yqf9Om/9hk/9Rjv+60P99tv9fpf88lv8yjf8Tgf8deP+kvP8BiP8NeP8hkP80gP8oj2VLAAAADXRSTlMA7o7qLvnaxZ1FOxYPjH9HWgAABHJJREFUeNrtm+tW4jAQgBfwuu7MtIUWsOUiCCioIIgLiqvr+z/UHq/LJKVkmwTcc/r9E2nzlU4mSTP9lpGRkZGR8VX5cZjfL+yCEXYL+/nDH//U/Pd8DgyTy39Xbv7oIAcWyB0cqbW/sweW2NtRaj8H1sgpGOwUIAH7Bkd7YJW9dXFwAJY5WNP/cmCZQnJvzIN18on5LwfWySXlxEPYAIcad8D6PdiHDbCfIFCADVBIENiFDbCbIACKPPXrZ+cP8E6/0znvP4EymgIEravIRcTxu8HxNSJ60a8W0AYECKrlAN+YwAthCd9wm1Ug6wKzIn5SgRduXfwkqDasCjx0XFzi9PV6zwNcIuhcWBOg+ikySq8C9UD4dEKWBCoOcspvAuLHTo9sCDQiFPHotRM48j8G5gVur1FdAN2uaYEuiz7xFsgEJ2RUoMUakXuBTHHoGxQYOBhHjeUBAefEnMAowFhaLBOKuOemBBbxLRQrH2PBCgMvNCPQGMeevTb9zLrPxz2Mo+QbEaijzPUcOOHMQZkKGRAIPem39+bypREMPTkQW/oCfk866zAkiIFG4yIKRE/aAnfiSd0WrORY6pFdXQEqi9mvAQm0RIOSnoCcZ8vJoz3diCnjRk+g8VP4/fuQDJ2Lxr6WwG0gXs9aTpDzW0vgDBlVUpixR8gYk44AD8FrUKHr8JQJGgIDnoDqoALxmWPQSi9AVVzm8gKUuEPGr/QCvptwJkbSYT/TC4S8C96DGjTj86aHtAI0x2WaBIq0eSYYpRa4EsdWVVwWu9O0Aj6f6dyBMnwEraeOgSYu0wZlauzA47QCbT7DgAQSE+hZWoEBF/BBmWOewNMK3BsSqKUW4MGcWqCSVmDkbvkXGKQOwg6PAUO9oL3xXhA20yaiCjuwYygRVQlUOTWTCf2SuNJTxeFjgaHByGuAIvd8ItdPLTDhS7IuqEE1YSKVOgbayLhSFQhMzYh8hwfBs1r7c505YVIQYEdNoKwxK06MJiyrpUFHiF0NAfCQUVHoiRclIXJIR6C2fqG37pBHvcWpgwzvAtYwkR5UGV2e42UISdBJETl3mg8ouo54Rcnti1/vaT+iuUQBt500Cgo4U10BeHSkk57FB0JjWkKRMWgLUA0lLodtImAQdaMiiri3+gIAPZQoutHNsgKF1aaDMhMyIdBf8Th+Bh8MTjGWCpl5Wv43tDmnF+IUVMrcZgRoiAxhtrloYizNkZaAnF5leglbNhj0wYCAbCDvGb0mP4nib7O7ZlcYQ2m1gPtIZgVgGNNMeaVAaWR+57TrqgtUnm3sHQ+kYeE6fufUubG1ez50FXbPnWgBlgSABmN3TTcsRl2yWkHRrwbiunvk/W2+Mg1hPZplPDeXRbZzStFH15s1QIVd3UImP5z/bHpeeQLvRJ7XLFUffQIlCvqlXETQbgN9/rlYABGosv+Vi9m2Xs639YLGrZd0br+odetlvdsvbN56abfd4vbCzv9Q3v/ygoOV21A4OPpfXvH4Ai+5ZGRkZGRkbJA/t/I0QMzoMiEAAAAASUVORK5CYII=
From e670b7e0594749a12375e9725eddf777560c14af Mon Sep 17 00:00:00 2001
From: rustdesk
Date: Mon, 27 Jun 2022 00:36:31 +0800
Subject: [PATCH 12/13] debug install
---
Cargo.lock | 20 ++++++++++----------
src/main.rs | 11 ++++-------
src/platform/windows.rs | 39 +++++++++++++++++++--------------------
src/ui.rs | 4 +++-
4 files changed, 36 insertions(+), 38 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index c55c906fc..7e679ef91 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -921,9 +921,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.9"
+version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978"
+checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
dependencies = [
"cfg-if 1.0.0",
"once_cell",
@@ -2571,9 +2571,9 @@ dependencies = [
[[package]]
name = "linked-hash-map"
-version = "0.5.4"
+version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "lock_api"
@@ -4462,9 +4462,9 @@ checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
[[package]]
name = "smallvec"
-version = "1.8.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+checksum = "cc88c725d61fc6c3132893370cac4a0200e3fedf5da8331c570664b1987f5ca2"
[[package]]
name = "smithay-client-toolkit"
@@ -4942,9 +4942,9 @@ dependencies = [
[[package]]
name = "tracing-core"
-version = "0.1.27"
+version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7709595b8878a4965ce5e87ebf880a7d39c9afc6837721b21a5a816a8117d921"
+checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7"
dependencies = [
"once_cell",
]
@@ -5025,9 +5025,9 @@ checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
[[package]]
name = "unicode-normalization"
-version = "0.1.19"
+version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+checksum = "81dee68f85cab8cf68dec42158baf3a79a1cdc065a8b103025965d6ccb7f6cbd"
dependencies = [
"tinyvec",
]
diff --git a/src/main.rs b/src/main.rs
index 04930ab4b..a5b1d7b04 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -97,6 +97,7 @@ fn main() {
"desktopicon startmenu",
"".to_owned(),
false,
+ false,
));
return;
} else if args[0] == "--silent-install" {
@@ -104,12 +105,9 @@ fn main() {
"desktopicon startmenu",
"".to_owned(),
true,
+ args.len() > 1,
));
return;
- } else if args[0] == "--extract" {
- #[cfg(feature = "with_rc")]
- hbb_common::allow_err!(crate::rc::extract_resources(&args[1]));
- return;
}
}
if args[0] == "--remove" {
@@ -197,7 +195,7 @@ fn main() {
.about("RustDesk command line tool")
.args_from_usage(&args)
.get_matches();
- use hbb_common::{env_logger::*, config::LocalConfig};
+ use hbb_common::env_logger::*;
init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info"));
if let Some(p) = matches.value_of("port-forward") {
let options: Vec = p.split(":").map(|x| x.to_owned()).collect();
@@ -224,7 +222,6 @@ fn main() {
remote_host = options[3].clone();
}
let key = matches.value_of("key").unwrap_or("").to_owned();
- let token = LocalConfig::get_option("access_token");
- cli::start_one_port_forward(options[0].clone(), port, remote_host, remote_port, key, token);
+ cli::start_one_port_forward(options[0].clone(), port, remote_host, remote_port, key);
}
}
diff --git a/src/platform/windows.rs b/src/platform/windows.rs
index cc3b4a050..4e8f7e16a 100644
--- a/src/platform/windows.rs
+++ b/src/platform/windows.rs
@@ -698,7 +698,7 @@ pub fn set_share_rdp(enable: bool) {
subkey,
if enable { "true" } else { "false" }
);
- run_cmds(cmd, false).ok();
+ run_cmds(cmd, false, "share_rdp").ok();
}
pub fn get_active_username() -> String {
@@ -835,7 +835,7 @@ pub fn check_update_broker_process() -> ResultType<()> {
origin_process_exe = origin_process_exe,
cur_exe = cur_exe.to_string_lossy().to_string(),
);
- run_cmds(cmds, false)?;
+ run_cmds(cmds, false, "update_broker")?;
Ok(())
}
@@ -876,7 +876,7 @@ pub fn update_me() -> ResultType<()> {
lic = register_licence(),
);
std::thread::sleep(std::time::Duration::from_millis(1000));
- run_cmds(cmds, false)?;
+ run_cmds(cmds, false, "update")?;
std::thread::sleep(std::time::Duration::from_millis(2000));
std::process::Command::new(&exe).arg("--tray").spawn().ok();
std::process::Command::new(&exe).spawn().ok();
@@ -905,7 +905,7 @@ fn get_after_install(exe: &str) -> String {
", ext=ext, exe=exe, app_name=app_name)
}
-pub fn install_me(options: &str, path: String, silent: bool) -> ResultType<()> {
+pub fn install_me(options: &str, path: String, silent: bool, debug: bool) -> ResultType<()> {
let uninstall_str = get_uninstall();
let mut path = path.trim_end_matches('\\').to_owned();
let (subkey, _path, start_menu, exe) = get_default_install_info();
@@ -929,7 +929,7 @@ pub fn install_me(options: &str, path: String, silent: bool) -> ResultType<()> {
version_build = versions[2];
}
- let tmp_path = "C:\\Windows\\temp";
+ let tmp_path = std::env::temp_dir().to_string_lossy().to_string();
let mk_shortcut = write_cmds(
format!(
"
@@ -945,6 +945,7 @@ oLink.Save
exe = exe,
),
"vbs",
+ "mk_shortcut",
)?
.to_str()
.unwrap_or("")
@@ -966,6 +967,7 @@ oLink.Save
exe = exe,
),
"vbs",
+ "uninstall_shortcut",
)?
.to_str()
.unwrap_or("")
@@ -986,6 +988,7 @@ oLink.Save
exe = exe,
),
"vbs",
+ "tray_shortcut",
)?
.to_str()
.unwrap_or("")
@@ -1042,7 +1045,7 @@ reg add {subkey} /f /v WindowsInstaller /t REG_DWORD /d 0
cscript \"{mk_shortcut}\"
cscript \"{uninstall_shortcut}\"
cscript \"{tray_shortcut}\"
-copy /Y \"{tmp_path}\\{app_name} Tray.lnk\" \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\\"
+copy /Y \"{tmp_path}\\{app_name} Tray.lnk\" \"%PROGRAMDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\\"
{shortcuts}
copy /Y \"{tmp_path}\\Uninstall {app_name}.lnk\" \"{path}\\\"
del /f \"{mk_shortcut}\"
@@ -1079,7 +1082,7 @@ sc delete {app_name}
lic=register_licence(),
after_install=get_after_install(&exe),
);
- run_cmds(cmds, false)?;
+ run_cmds(cmds, debug, "install")?;
std::thread::sleep(std::time::Duration::from_millis(2000));
if !silent {
std::process::Command::new(&exe).spawn()?;
@@ -1091,11 +1094,11 @@ sc delete {app_name}
pub fn run_after_install() -> ResultType<()> {
let (_, _, _, exe) = get_install_info();
- run_cmds(get_after_install(&exe), true)
+ run_cmds(get_after_install(&exe), true, "after_install")
}
pub fn run_before_uninstall() -> ResultType<()> {
- run_cmds(get_before_uninstall(), true)
+ run_cmds(get_before_uninstall(), true, "before_install")
}
fn get_before_uninstall() -> String {
@@ -1126,7 +1129,7 @@ fn get_uninstall() -> String {
rd /s /q \"{path}\"
rd /s /q \"{start_menu}\"
del /f /q \"%PUBLIC%\\Desktop\\{app_name}*\"
- del /f /q \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\{app_name} Tray.lnk\"
+ del /f /q \"%PROGRAMDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\{app_name} Tray.lnk\"
",
before_uninstall=get_before_uninstall(),
subkey=subkey,
@@ -1137,17 +1140,12 @@ fn get_uninstall() -> String {
}
pub fn uninstall_me() -> ResultType<()> {
- run_cmds(get_uninstall(), true)
+ run_cmds(get_uninstall(), true, "uninstall")
}
-fn write_cmds(cmds: String, ext: &str) -> ResultType {
+fn write_cmds(cmds: String, ext: &str, tip: &str) -> ResultType {
let mut tmp = std::env::temp_dir();
- tmp.push(format!(
- "{}_{:?}.{}",
- crate::get_app_name(),
- cmds.as_ptr(),
- ext
- ));
+ tmp.push(format!("{}_{}.{}", crate::get_app_name(), tip, ext));
let mut file = std::fs::File::create(&tmp)?;
// in case cmds mixed with \r\n and \n, make sure all ending with \r\n
// in some windows, \r\n required for cmd file to run
@@ -1170,8 +1168,8 @@ fn to_le(v: &mut [u16]) -> &[u8] {
unsafe { v.align_to().1 }
}
-fn run_cmds(cmds: String, show: bool) -> ResultType<()> {
- let tmp = write_cmds(cmds, "bat")?;
+fn run_cmds(cmds: String, show: bool, tip: &str) -> ResultType<()> {
+ let tmp = write_cmds(cmds, "bat", tip)?;
let tmp_fn = tmp.to_str().unwrap_or("");
let res = runas::Command::new("cmd")
.args(&["/C", &tmp_fn])
@@ -1348,6 +1346,7 @@ oLink.Save
id = id,
),
"vbs",
+ "connect_shortcut",
)?
.to_str()
.unwrap_or("")
diff --git a/src/ui.rs b/src/ui.rs
index 76ba23226..b93c11d44 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -213,7 +213,9 @@ impl UI {
fn install_me(&mut self, _options: String, _path: String) {
#[cfg(windows)]
std::thread::spawn(move || {
- allow_err!(crate::platform::windows::install_me(&_options, _path, false));
+ allow_err!(crate::platform::windows::install_me(
+ &_options, _path, false, false
+ ));
std::process::exit(0);
});
}
From 2fa2c2d385cd5198075db808d4964abf03b24154 Mon Sep 17 00:00:00 2001
From: Asura
Date: Sun, 26 Jun 2022 18:19:38 -0700
Subject: [PATCH 13/13] fix(pynput): Use fake input to solve lock screen
problems
---
pynput_service.py | 30 +++++++-----------------------
1 file changed, 7 insertions(+), 23 deletions(-)
diff --git a/pynput_service.py b/pynput_service.py
index 24edcc1f9..90b8741ce 100644
--- a/pynput_service.py
+++ b/pynput_service.py
@@ -17,30 +17,14 @@ class MyController(Controller):
:param event: The *X* keyboard event.
:param int keysym: The keysym to handle.
"""
+ keysym = self._keysym(key)
+ keycode = self._display.keysym_to_keycode(keysym)
- event = Xlib.display.event.KeyPress if is_press \
- else Xlib.display.event.KeyRelease
-
- origin_keysym = self._keysym(key)
- keycode = self._display.keysym_to_keycode(origin_keysym)
-
- with display_manager(self._display) as dm, self.modifiers as modifiers:
- # Under certain cimcumstances, such as when running under Xephyr,
- # the value returned by dm.get_input_focus is an int
- window = dm.get_input_focus().focus
- send_event = getattr(
- window,
- 'send_event',
- lambda event: dm.send_event(window, event))
- send_event(event(
- detail=keycode,
- state=self._shift_mask(modifiers),
- time=0,
- root=dm.screen().root,
- window=window,
- same_screen=0,
- child=Xlib.X.NONE,
- root_x=0, root_y=0, event_x=0, event_y=0))
+ with display_manager(self._display) as dm:
+ Xlib.ext.xtest.fake_input(
+ dm,
+ Xlib.X.KeyPress if is_press else Xlib.X.KeyRelease,
+ keycode)