This commit is contained in:
csf
2023-01-09 14:51:58 +09:00
76 changed files with 1266 additions and 244 deletions

View File

@@ -38,6 +38,17 @@ pub fn core_main() -> Option<Vec<String>> {
}
i += 1;
}
#[cfg(target_os = "linux")]
#[cfg(feature = "flutter")]
{
crate::platform::linux::register_breakdown_handler();
let (k, v) = ("LIBGL_ALWAYS_SOFTWARE", "true");
if !hbb_common::config::Config::get_option("allow-always-software-render").is_empty() {
std::env::set_var(k, v);
} else {
std::env::remove_var(k);
}
}
#[cfg(feature = "flutter")]
if _is_flutter_connect {
return core_main_invoke_new_connection(std::env::args());

View File

@@ -885,9 +885,11 @@ pub fn session_send_mouse(id: String, msg: String) {
}
if let Some(buttons) = m.get("buttons") {
mask |= match buttons.as_str() {
"left" => 1,
"right" => 2,
"wheel" => 4,
"left" => 0x01,
"right" => 0x02,
"wheel" => 0x04,
"back" => 0x08,
"forward" => 0x10,
_ => 0,
} << 3;
}
@@ -1111,6 +1113,10 @@ pub fn main_is_can_screen_recording(prompt: bool) -> SyncReturn<bool> {
SyncReturn(is_can_screen_recording(prompt))
}
pub fn main_is_can_input_monitoring(prompt: bool) -> SyncReturn<bool> {
SyncReturn(is_can_input_monitoring(prompt))
}
pub fn main_is_share_rdp() -> SyncReturn<bool> {
SyncReturn(is_share_rdp())
}

View File

@@ -30,6 +30,7 @@ mod sv;
mod sq;
mod sr;
mod th;
mod sl;
lazy_static::lazy_static! {
pub static ref LANGS: Value =
@@ -63,6 +64,7 @@ lazy_static::lazy_static! {
("sq", "Shqip"),
("sr", "Srpski"),
("th", "ภาษาไทย"),
("sl", "Slovenščina"),
]);
}
@@ -120,6 +122,7 @@ pub fn translate_locale(name: String, locale: &str) -> String {
"sq" => sq::T.deref(),
"sr" => sr::T.deref(),
"th" => th::T.deref(),
"sl" => sl::T.deref(),
_ => en::T.deref(),
};
if let Some(v) = m.get(&name as &str) {

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -7,7 +7,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Password", "密码"),
("Ready", "就绪"),
("Established", "已建立"),
("connecting_status", "正在接入RustDesk网络..."),
("connecting_status", "正在接入 RustDesk 网络..."),
("Enable Service", "允许服务"),
("Start Service", "启动服务"),
("Service is running", "服务正在运行"),
@@ -138,13 +138,13 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Failed to make direct connection to remote desktop", "无法建立直接连接"),
("Set Password", "设置密码"),
("OS Password", "操作系统密码"),
("install_tip", "你正在运行未安装版本由于UAC限制作为被控端会在某些情况下无法控制鼠标键盘或者录制屏幕请点击下面的按钮将RustDesk安装到系统从而规避上述问题。"),
("install_tip", "你正在运行未安装版本由于UAC限制作为被控端会在某些情况下无法控制鼠标键盘或者录制屏幕请点击下面的按钮将 RustDesk 安装到系统,从而规避上述问题。"),
("Click to upgrade", "点击这里升级"),
("Click to download", "点击这里下载"),
("Click to update", "点击这里更新"),
("Configure", "配置"),
("config_acc", "为了能够远程控制你的桌面, 请给予RustDesk\"辅助功能\" 权限。"),
("config_screen", "为了能够远程访问你的桌面, 请给予RustDesk\"屏幕录制\" 权限。"),
("config_acc", "为了能够远程控制你的桌面, 请给予 RustDesk \"辅助功能\" 权限。"),
("config_screen", "为了能够远程访问你的桌面, 请给予 RustDesk \"屏幕录制\" 权限。"),
("Installing ...", "安装 ..."),
("Install", "安装"),
("Installation", "安装"),
@@ -303,9 +303,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("In privacy mode", "进入隐私模式"),
("Out privacy mode", "退出隐私模式"),
("Language", "语言"),
("Keep RustDesk background service", "保持RustDesk后台服务"),
("Keep RustDesk background service", "保持 RustDesk 后台服务"),
("Ignore Battery Optimizations", "忽略电池优化"),
("android_open_battery_optimizations_tip", "如需关闭此功能请在接下来的RustDesk应用设置页面中找到并进入 [电源] 页面,取消勾选 [不受限制]"),
("android_open_battery_optimizations_tip", "如需关闭此功能,请在接下来的 RustDesk 应用设置页面中,找到并进入 [电源] 页面,取消勾选 [不受限制]"),
("Connection not allowed", "对方不允许连接"),
("Legacy mode", "传统模式"),
("Map mode", "11传输"),
@@ -385,7 +385,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland 需要更高版本的 linux 发行版。 请尝试 X11 桌面或更改您的操作系统。"),
("JumpLink", "查看"),
("Please Select the screen to be shared(Operate on the peer side).", "请选择要分享的画面(对端操作)。"),
("Show RustDesk", "显示rustdesk"),
("Show RustDesk", "显示 RustDesk"),
("This PC", "此电脑"),
("or", ""),
("Continue with", "使用"),
@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", "被web控制台手动关闭"),
("Local keyboard type", "本地键盘类型"),
("Select local keyboard type", "请选择本地键盘类型"),
("software_render_tip", "如果你使用英伟达显卡, 并且远程窗口在会话建立后会立刻关闭, 那么安装nouveau驱动并且选择使用软件渲染可能会有帮助。重启软件后生效。"),
("Always use software rendering", "使用软件渲染"),
("config_input", "为了能够通过键盘控制远程桌面, 请给予 RustDesk \"输入监控\" 权限。"),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -9,7 +9,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Established", "Verbunden"),
("connecting_status", "Verbinden mit dem RustDesk-Netzwerk..."),
("Enable Service", "Vermittlungsdienst aktivieren"),
("Start Service", "Starte Vermittlungsdienst"),
("Start Service", "Vermittlungsdienst starten"),
("Service is running", "Vermittlungsdienst aktiv"),
("Service is not running", "Vermittlungsdienst deaktiviert"),
("not_ready_status", "Nicht bereit. Bitte überprüfen Sie Ihre Netzwerkverbindung."),
@@ -35,7 +35,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Export server configuration successfully", "Serverkonfiguration erfolgreich exportiert"),
("Invalid server configuration", "Ungültige Serverkonfiguration"),
("Clipboard is empty", "Zwischenablage ist leer"),
("Stop service", "Vermittlungsdienst deaktivieren"),
("Stop service", "Vermittlungsdienst stoppen"),
("Change ID", "ID ändern"),
("Website", "Webseite"),
("About", "Über"),
@@ -165,7 +165,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Local Port", "Lokaler Port"),
("Local Address", "Lokale Adresse"),
("Change Local Port", "Lokalen Port ändern"),
("setup_server_tip", "für eine schnellere Verbindung richten Sie bitte Ihren eigenen Verbindungsserver ein."),
("setup_server_tip", "für eine schnellere Verbindung richten Sie bitte Ihren eigenen Server ein."),
("Too short, at least 6 characters.", "Zu kurz, mindestens 6 Zeichen."),
("The confirmation is not identical.", "Die Passwörter stimmen nicht überein."),
("Permissions", "Berechtigungen"),
@@ -244,7 +244,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Are you sure to close the connection?", "Möchten Sie diese Verbindung wirklich trennen?"),
("Download new version", "Neue Version herunterladen"),
("Touch mode", "Touch-Modus"),
("Mouse mode", "Maus-Modus"),
("Mouse mode", "Mausmodus"),
("One-Finger Tap", "1-Finger-Tipp"),
("Left Mouse", "Linksklick"),
("One-Long Tap", "1-Finger-Halten"),
@@ -260,8 +260,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Pinch to Zoom", "2-Finger-Zoom"),
("Canvas Zoom", "Sichtfeld-Zoom"),
("Reset canvas", "Sichtfeld zurücksetzen"),
("No permission of file transfer", "Keine Berechtigung für den Dateizugriff"),
("Note", "Anmerkung"),
("No permission of file transfer", "Keine Berechtigung für die Dateiübertragung"),
("Note", "Hinweis"),
("Connection", "Verbindung"),
("Share Screen", "Bildschirm freigeben"),
("CLOSE", "DEAKTIV."),
@@ -278,7 +278,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Do you accept?", "Verbindung zulassen?"),
("Open System Setting", "Systemeinstellung öffnen"),
("How to get Android input permission?", "Wie erhalte ich eine Android-Eingabeberechtigung?"),
("android_input_permission_tip1", "Damit ein Remote-Gerät Ihr Android-Gerät steuern kann, müssen Sie RustDesk erlauben, den Dienst \"Barrierefreiheit\" zu verwenden."),
("android_input_permission_tip1", "Damit ein entferntes Gerät Ihr Android-Gerät steuern kann, müssen Sie RustDesk erlauben, den Dienst \"Barrierefreiheit\" zu verwenden."),
("android_input_permission_tip2", "Bitte gehen Sie zur nächsten Systemeinstellungsseite, suchen Sie [Installierte Dienste] und schalten Sie den Dienst [RustDesk Input] ein."),
("android_new_connection_tip", "möchte ihr Gerät steuern."),
("android_service_will_start_tip", "Durch das Aktivieren der Bildschirmfreigabe wird der Dienst automatisch gestartet, sodass andere Geräte dieses Android-Gerät steuern können."),
@@ -295,9 +295,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Succeeded", "Erfolgreich"),
("Someone turns on privacy mode, exit", "Jemand hat den Datenschutzmodus aktiviert, beende..."),
("Unsupported", "Nicht unterstützt"),
("Peer denied", "Die Gegenstelle hat die Verbindung abgelehnt"),
("Peer denied", "Die Gegenstelle hat die Verbindung abgelehnt."),
("Please install plugins", "Bitte installieren Sie Plugins"),
("Peer exit", "Die Gegenstelle hat die Verbindung getrennt"),
("Peer exit", "Die Gegenstelle hat die Verbindung getrennt."),
("Failed to turn off", "Ausschalten fehlgeschlagen"),
("Turned off", "Ausgeschaltet"),
("In privacy mode", "Datenschutzmodus aktivieren"),
@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", "Manuell über die Webkonsole beendet"),
("Local keyboard type", "Lokaler Tastaturtyp"),
("Select local keyboard type", "Lokalen Tastaturtyp auswählen"),
("software_render_tip", "Wenn Sie eine Nvidia-Grafikkarte haben und sich das entfernte Fenster sofort nach dem Herstellen der Verbindung schließt, kann es helfen, den Nouveau-Treiber zu installieren und Software-Rendering zu verwenden. Ein Neustart der Software ist erforderlich."),
("Always use software rendering", "Software-Rendering immer verwenden"),
("config_input", "Um den entfernten Desktop mit der Tastatur steuern zu können, müssen Sie RustDesk \"Input Monitoring\"-Rechte erteilen."),
].iter().cloned().collect();
}

View File

@@ -37,5 +37,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("wayland_experiment_tip", "Wayland support is in experimental stage, please use X11 if you require unattended access."),
("Slogan_tip", "Made with heart in this chaotic world!"),
("verification_tip", "A new device has been detected, and a verification code has been sent to the registered email address, enter the verification code to continue logging in."),
("software_render_tip", "If you have an Nvidia graphics card and the remote window closes immediately after connecting, installing the nouveau driver and choosing to use software rendering may help. A software restart is required."),
("config_input", "In order to control remote desktop with keyboard, you need to grant RustDesk \"Input Monitoring\" permissions."),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -39,7 +39,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Change ID", "Cambiar ID"),
("Website", "Sitio web"),
("About", "Acerca de"),
("Slogan_tip", ""),
("Slogan_tip", "Hecho con corazón en este mundo caótico!"),
("Privacy Statement", ""),
("Mute", "Silenciar"),
("Audio Input", "Entrada de audio"),
@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", "Cerrado manualmente por la consola web"),
("Local keyboard type", "Tipo de teclado local"),
("Select local keyboard type", "Seleccionar tipo de teclado local"),
("software_render_tip", "Si tienes una gráfica Nvidia y la ventana remota se cierra inmediatamente, instalar el driver nouveau y elegir renderizado por software podría ayudar. Se requiere reiniciar la aplicación."),
("Always use software rendering", "Usar siempre renderizado por software"),
("config_input", "Para controlar el escritorio remoto con el teclado necesitas dar a RustDesk permisos de \"Monitorización de entrada\"."),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", "Fermé manuellement par la console Web"),
("Local keyboard type", "Disposition du clavier local"),
("Select local keyboard type", "Selectionner la disposition du clavier local"),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", "Chiudi manualmente dalla console Web"),
("Local keyboard type", "Tipo di tastiera locale"),
("Select local keyboard type", "Seleziona il tipo di tastiera locale"),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -206,7 +206,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the peer", "Закрыто удалённым узлом вручную"),
("Enable remote configuration modification", "Разрешить удалённое изменение конфигурации"),
("Run without install", "Запустить без установки"),
("Always connected via relay", "Всегда подключён через ретрансляционный сервер"),
("Always connected via relay", "Всегда подключается через ретрансляционный сервер"),
("Always connect via relay", "Всегда подключаться через ретрансляционный сервер"),
("whitelist_tip", "Только IP-адреса из белого списка могут получить доступ ко мне"),
("Login", "Войти"),
@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", "Закрыто вручную через веб-консоль"),
("Local keyboard type", "Тип локальной клавиатуры"),
("Select local keyboard type", "Выберите тип локальной клавиатуры"),
("software_render_tip", "Если у вас видеокарта Nvidia и удалённое окно закрывается сразу после подключения, может помочь установка драйвера Nouveau и выбор использования программной визуализации. Потребуется перезапуск."),
("Always use software rendering", "Использовать программную визуализацию"),
("config_input", "Чтобы управлять удалённым рабочим столом с помощью клавиатуры, необходимо предоставить RustDesk разрешения \"Мониторинг ввода\"."),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

417
src/lang/sl.rs Executable file
View File

@@ -0,0 +1,417 @@
lazy_static::lazy_static! {
pub static ref T: std::collections::HashMap<&'static str, &'static str> =
[
("Status", "Stanje"),
("Your Desktop", "Vaše namizje"),
("desk_tip", "Do vašega namizja lahko dostopate s spodnjim IDjem in geslom"),
("Password", "Geslo"),
("Ready", "Pripravljen"),
("Established", "Povezava vzpostavljena"),
("connecting_status", "Vzpostavljanje povezave z omrežjem RustDesk..."),
("Enable Service", "Omogoči storitev"),
("Start Service", "Zaženi storitev"),
("Service is running", "Storitev se izvaja"),
("Service is not running", "Storitev se ne izvaja"),
("not_ready_status", "Ni pripravljeno, preverite vašo mrežno povezavo"),
("Control Remote Desktop", "Nadzoruj oddaljeno namizje"),
("Transfer File", "Prenos datotek"),
("Connect", "Poveži"),
("Recent Sessions", "Nedavne seje"),
("Address Book", "Adresar"),
("Confirmation", "Potrditev"),
("TCP Tunneling", "TCP tuneliranje"),
("Remove", "Odstrani"),
("Refresh random password", "Osveži naključno geslo"),
("Set your own password", "Nastavi lastno geslo"),
("Enable Keyboard/Mouse", "Omogoči tipkovnico in miško"),
("Enable Clipboard", "Omogoči odložišče"),
("Enable File Transfer", "Omogoči prenos datotek"),
("Enable TCP Tunneling", "Omogoči TCP tuneliranje"),
("IP Whitelisting", "Omogoči seznam dovoljenih IPjev"),
("ID/Relay Server", "Strežnik za ID/posredovanje"),
("Import Server Config", "Uvozi nastavitve strežnika"),
("Export Server Config", "Izvozi nastavitve strežnika"),
("Import server configuration successfully", "Nastavitve strežnika uspešno uvožene"),
("Export server configuration successfully", "Nastavitve strežnika uspešno izvožene"),
("Invalid server configuration", "Neveljavne nastavitve strežnika"),
("Clipboard is empty", "Odložišče je prazno"),
("Stop service", "Ustavi storitev"),
("Change ID", "Spremeni ID"),
("Website", "Spletna stran"),
("About", "O programu"),
("Slogan_tip", ""),
("Privacy Statement", ""),
("Mute", "Izklopi zvok"),
("Audio Input", "Avdio vhod"),
("Enhancements", "Izboljšave"),
("Hardware Codec", "Strojni kodek"),
("Adaptive Bitrate", "Prilagodljiva bitna hitrost"),
("ID Server", "ID strežnik"),
("Relay Server", "Posredniški strežnik"),
("API Server", "API strežnik"),
("invalid_http", "mora se začeti s http:// ali https://"),
("Invalid IP", "Neveljaven IP"),
("id_change_tip", "Dovoljeni znaki so a-z, A-Z (brez šumnikov), 0-9 in _. Prvi znak mora biti črka, dolžina od 6 do 16 znakov."),
("Invalid format", "Neveljavna oblika"),
("server_not_support", "Strežnik še ne podpira"),
("Not available", "Ni na voljo"),
("Too frequent", "Prepogosto"),
("Cancel", "Prekliči"),
("Skip", "Izpusti"),
("Close", "Zapri"),
("Retry", "Ponovi"),
("OK", "V redu"),
("Password Required", "Potrebno je geslo"),
("Please enter your password", "Vnesite vaše geslo"),
("Remember password", "Zapomni si geslo"),
("Wrong Password", "Napačno geslo"),
("Do you want to enter again?", "Želite znova vnesti?"),
("Connection Error", "Napaka pri povezavi"),
("Error", "Napaka"),
("Reset by the peer", "Povezava prekinjena"),
("Connecting...", "Povezovanje..."),
("Connection in progress. Please wait.", "Vzpostavljanje povezave, prosim počakajte."),
("Please try 1 minute later", "Poizkusite čez 1 minuto"),
("Login Error", "Napaka pri prijavi"),
("Successful", "Uspešno"),
("Connected, waiting for image...", "Povezava vzpostavljena, čakam na sliko..."),
("Name", "Ime"),
("Type", "Vrsta"),
("Modified", "Čas spremembe"),
("Size", "Velikost"),
("Show Hidden Files", "Prikaži skrite datoteke"),
("Receive", "Prejmi"),
("Send", "Pošlji"),
("Refresh File", "Osveži datoteko"),
("Local", "Lokalno"),
("Remote", "Oddaljeno"),
("Remote Computer", "Oddaljeni računalnik"),
("Local Computer", "Lokalni računalnik"),
("Confirm Delete", "Potrdi izbris"),
("Delete", "Izbriši"),
("Properties", "Lastnosti"),
("Multi Select", "Večkratna izbira"),
("Select All", "Izberi vse"),
("Unselect All", "Počisti vse"),
("Empty Directory", "Prazen imenik"),
("Not an empty directory", "Imenik ni prazen"),
("Are you sure you want to delete this file?", "Ali res želite izbrisati to datoteko?"),
("Are you sure you want to delete this empty directory?", "Ali res želite izbrisati to prazno mapo?"),
("Are you sure you want to delete the file of this directory?", "Ali res želite datoteko iz mape?"),
("Do this for all conflicts", "Naredi to za vse"),
("This is irreversible!", "Tega dejanja ni mogoče razveljaviti!"),
("Deleting", "Brisanje"),
("files", "datoteke"),
("Waiting", "Čakanje"),
("Finished", "Opravljeno"),
("Speed", "Hitrost"),
("Custom Image Quality", "Kakovost slike po meri"),
("Privacy mode", "Zasebni način"),
("Block user input", "Onemogoči uporabnikov vnos"),
("Unblock user input", "Omogoči uporabnikov vnos"),
("Adjust Window", "Prilagodi okno"),
("Original", "Originalno"),
("Shrink", "Skrči"),
("Stretch", "Raztegni"),
("Scrollbar", "Drsenje z drsniki"),
("ScrollAuto", "Samodejno drsenje"),
("Good image quality", "Visoka kakovost slike"),
("Balanced", "Uravnoteženo"),
("Optimize reaction time", "Optimiraj odzivni čas"),
("Custom", "Po meri"),
("Show remote cursor", "Prikaži oddaljeni kazalec miške"),
("Show quality monitor", "Prikaži nadzornik kakovosti"),
("Disable clipboard", "Onemogoči odložišče"),
("Lock after session end", "Zakleni ob koncu seje"),
("Insert", "Vstavi"),
("Insert Lock", "Zakleni oddaljeni računalnik"),
("Refresh", "Osveži"),
("ID does not exist", "ID ne obstaja"),
("Failed to connect to rendezvous server", "Ni se bilo mogoče povezati na povezovalni strežnik"),
("Please try later", "Poizkusite znova kasneje"),
("Remote desktop is offline", "Oddaljeno namizje ni dosegljivo"),
("Key mismatch", "Ključ ni ustrezen"),
("Timeout", "Časovna omejitev"),
("Failed to connect to relay server", "Ni se bilo mogoče povezati na posredniški strežnik"),
("Failed to connect via rendezvous server", "Ni se bilo mogoče povezati preko povezovalnega strežnika"),
("Failed to connect via relay server", "Ni se bilo mogoče povezati preko posredniškega strežnika"),
("Failed to make direct connection to remote desktop", "Ni bilo mogoče vzpostaviti neposredne povezave z oddaljenim namizjem"),
("Set Password", "Nastavi geslo"),
("OS Password", "Geslo operacijskega sistema"),
("install_tip", "Zaradi nadzora uporabniškega računa, RustDesk v nekaterih primerih na oddaljeni strani ne deluje pravilno. Temu se lahko izognete z namestitvijo."),
("Click to upgrade", "Klikni za nadgradnjo"),
("Click to download", "Klikni za prenos"),
("Click to update", "Klikni za posodobitev"),
("Configure", "Nastavi"),
("config_acc", "Za oddaljeni nadzor namizja morate RustDesku dodeliti pravico za dostopnost"),
("config_screen", "Za oddaljeni dostop do namizja morate RustDesku dodeliti pravico snemanje zaslona"),
("Installing ...", "Nameščanje..."),
("Install", "Namesti"),
("Installation", "Namestitev"),
("Installation Path", "Pot za namestitev"),
("Create start menu shortcuts", "Ustvari bližnjice v meniju Začetek"),
("Create desktop icon", "Ustvari ikono na namizju"),
("agreement_tip", "Z namestitvijo se strinjate z licenčno pogodbo"),
("Accept and Install", "Sprejmi in namesti"),
("End-user license agreement", "Licenčna pogodba za končnega uporabnika"),
("Generating ...", "Ustvarjanje ..."),
("Your installation is lower version.", "Vaša namestitev je starejša"),
("not_close_tcp_tip", "Med uporabo tunela ne zaprite tega okna"),
("Listening ...", "Poslušam ..."),
("Remote Host", "Oddaljeni gostitelj"),
("Remote Port", "Oddaljena vrata"),
("Action", "Dejanje"),
("Add", "Dodaj"),
("Local Port", "Lokalna vrata"),
("Local Address", "Lokalni naslov"),
("Change Local Port", "Spremeni lokalna vrata"),
("setup_server_tip", "Za hitrejšo povezavo uporabite lasten strežnik"),
("Too short, at least 6 characters.", "Prekratek, mora biti najmanj 6 znakov."),
("The confirmation is not identical.", "Potrditev ni enaka."),
("Permissions", "Dovoljenja"),
("Accept", "Sprejmi"),
("Dismiss", "Opusti"),
("Disconnect", "Prekini povezavo"),
("Allow using keyboard and mouse", "Dovoli uporabo tipkovnice in miške"),
("Allow using clipboard", "Dovoli uporabo odložišča"),
("Allow hearing sound", "Dovoli prenos zvoka"),
("Allow file copy and paste", "Dovoli kopiranje in lepljenje datotek"),
("Connected", "Povezan"),
("Direct and encrypted connection", "Neposredna šifrirana povezava"),
("Relayed and encrypted connection", "Posredovana šifrirana povezava"),
("Direct and unencrypted connection", "Neposredna nešifrirana povezava"),
("Relayed and unencrypted connection", "Posredovana šifrirana povezava"),
("Enter Remote ID", "Vnesi oddaljeni ID"),
("Enter your password", "Vnesi geslo"),
("Logging in...", "Prijavljanje..."),
("Enable RDP session sharing", "Omogoči deljenje RDP seje"),
("Auto Login", "Samodejna prijava"),
("Enable Direct IP Access", "Omogoči neposredni dostop preko IP"),
("Rename", "Preimenuj"),
("Space", "Prazno"),
("Create Desktop Shortcut", "Ustvari bližnjico na namizju"),
("Change Path", "Spremeni pot"),
("Create Folder", "Ustvari mapo"),
("Please enter the folder name", "Vnesite ime mape"),
("Fix it", "Popravi"),
("Warning", "Opozorilo"),
("Login screen using Wayland is not supported", "Prijava z Waylandom ni podprta"),
("Reboot required", "Potreben je ponovni zagon"),
("Unsupported display server ", "Nepodprt zaslonski strežnik"),
("x11 expected", "Pričakovan X11"),
("Port", "Vrata"),
("Settings", "Nastavitve"),
("Username", "Uporabniško ime"),
("Invalid port", "Neveljavno geslo"),
("Closed manually by the peer", "Povezavo ročno prekinil odjemalec"),
("Enable remote configuration modification", "Omogoči oddaljeno spreminjanje nastavitev"),
("Run without install", "Zaženi brez namestitve"),
("Always connected via relay", "Vedno povezan preko posrednika"),
("Always connect via relay", "Vedno poveži preko posrednika"),
("whitelist_tip", "Dostop je možen samo iz dovoljenih IPjev"),
("Login", "Prijavi"),
("Verify", ""),
("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Odjavi"),
("Tags", "Oznake"),
("Search ID", "Išči ID"),
("Current Wayland display server is not supported", "Trenutni Wayland zaslonski strežnik ni podprt"),
("whitelist_sep", "Naslovi ločeni z vejico, podpičjem, presledkom ali novo vrstico"),
("Add ID", "Dodaj ID"),
("Add Tag", "Dodaj oznako"),
("Unselect all tags", ""),
("Network error", "Omrežna napaka"),
("Username missed", "Up. ime izpuščeno"),
("Password missed", "Geslo izpuščeno"),
("Wrong credentials", "Napačne poverilnice"),
("Edit Tag", "Uredi oznako"),
("Unremember Password", "Pozabi geslo"),
("Favorites", "Priljubljene"),
("Add to Favorites", "Dodaj med priljubljene"),
("Remove from Favorites", "Odstrani iz priljubljenih"),
("Empty", "Prazno"),
("Invalid folder name", "Napačno ime mape"),
("Socks5 Proxy", "Socks5 posredniški strežnik"),
("Hostname", "Ime gostitelja"),
("Discovered", "Odkriti"),
("install_daemon_tip", "Za samodejni zagon ob vklopu računalnika je potrebno dodati sistemsko storitev"),
("Remote ID", "Oddaljeni ID"),
("Paste", "Prilepi"),
("Paste here?", "Prilepi tu?"),
("Are you sure to close the connection?", "Ali želite prekiniti povezavo?"),
("Download new version", "Prenesi novo različico"),
("Touch mode", "Način dotika"),
("Mouse mode", "Način mišle"),
("One-Finger Tap", "Tap z enim prstom"),
("Left Mouse", "Leva tipka miške"),
("One-Long Tap", "Dolg tap z enim prstom"),
("Two-Finger Tap", "Tap z dvema prstoma"),
("Right Mouse", "Desna tipka miške"),
("One-Finger Move", "Premik z enim prstom"),
("Double Tap & Move", "Dvojni tap in premik"),
("Mouse Drag", "Vlečenje z miško"),
("Three-Finger vertically", "Triprstno navpično"),
("Mouse Wheel", "Miškino kolesce"),
("Two-Finger Move", "Premik z dvema prstoma"),
("Canvas Move", "Premik platna"),
("Pinch to Zoom", "Povečava s približevanjem prstov"),
("Canvas Zoom", "Povečava platna"),
("Reset canvas", "Ponastavi platno"),
("No permission of file transfer", "Ni pravic za prenos datotek"),
("Note", "Opomba"),
("Connection", "Povezava"),
("Share Screen", "Deli zaslon"),
("CLOSE", "ZAPRI"),
("OPEN", "ODPRI"),
("Chat", "Pogovor"),
("Total", "Skupaj"),
("items", "elementi"),
("Selected", "Izbrano"),
("Screen Capture", "Zajem zaslona"),
("Input Control", "Nadzor vnosa"),
("Audio Capture", "Zajem zvoka"),
("File Connection", "Datotečna povezava"),
("Screen Connection", "Zaslonska povezava"),
("Do you accept?", "Ali sprejmete?"),
("Open System Setting", "Odpri sistemske nastavitve"),
("How to get Android input permission?", "Kako pridobiti dovoljenje za vnos na Androidu?"),
("android_input_permission_tip1", "Za oddaljeni nadzor vaše naprave Android, je potrebno RustDesku dodeliti pravico za dostopnost."),
("android_input_permission_tip2", "Pojdite v sistemske nastavitve, poiščite »Nameščene storitve« in vklopite storitev »RustDesk Input«."),
("android_new_connection_tip", "Prejeta je bila zahteva za oddaljeni nadzor vaše naprave."),
("android_service_will_start_tip", "Z vklopom zajema zaslona se bo samodejno zagnala storitev, ki omogoča da oddaljene naprave pošljejo zahtevo za povezavo na vašo napravo."),
("android_stop_service_tip", "Z zaustavitvijo storitve bodo samodejno prekinjene vse oddaljene povezave."),
("android_version_audio_tip", "Trenutna različica Androida ne omogoča zajema zvoka. Za zajem zvoka nadgradite na Android 10 ali novejši."),
("android_start_service_tip", "Tapnite »Zaženi storitev« ali »ODPRI« pri dovoljenju za zajem zaslona da zaženete storitev deljenja zaslona."),
("Account", "Račun"),
("Overwrite", "Prepiši"),
("This file exists, skip or overwrite this file?", "Datoteka obstaja, izpusti ali prepiši?"),
("Quit", "Izhod"),
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
("Help", "Pomoč"),
("Failed", "Ni uspelo"),
("Succeeded", "Uspelo"),
("Someone turns on privacy mode, exit", "Vklopljen je zasebni način, izhod"),
("Unsupported", "Ni podprto"),
("Peer denied", "Odjemalec zavrnil"),
("Please install plugins", "Namestite vključke"),
("Peer exit", "Odjemalec se je zaprl"),
("Failed to turn off", "Ni bilo mogoče izklopiti"),
("Turned off", "Izklopljeno"),
("In privacy mode", "V zasebnem načinu"),
("Out privacy mode", "Iz zasebnega načina"),
("Language", "Jezik"),
("Keep RustDesk background service", "Ohrani RustDeskovo storitev v ozadju"),
("Ignore Battery Optimizations", "Prezri optimizacije baterije"),
("android_open_battery_optimizations_tip", "Če želite izklopiti to možnost, pojdite v nastavitve aplikacije RustDesk, poiščite »Baterija« in izklopite »Neomejeno«"),
("Connection not allowed", "Povezava ni dovoljena"),
("Legacy mode", "Stari način"),
("Map mode", "Način preslikave"),
("Translate mode", "Način prevajanja"),
("Use permanent password", "Uporabi stalno geslo"),
("Use both passwords", "Uporabi obe gesli"),
("Set permanent password", "Nastavi stalno geslo"),
("Enable Remote Restart", "Omogoči oddaljeni ponovni zagon"),
("Allow remote restart", "Dovoli oddaljeni ponovni zagon"),
("Restart Remote Device", "Znova zaženi oddaljeno napravo"),
("Are you sure you want to restart", "Ali ste prepričani, da želite znova zagnati"),
("Restarting Remote Device", "Ponovni zagon oddaljene naprave"),
("remote_restarting_tip", "Oddaljena naprava se znova zaganja, prosim zaprite to sporočilo in se čez nekaj časa povežite s stalnim geslom."),
("Copied", "Kopirano"),
("Exit Fullscreen", "Izhod iz celozaslonskega načina"),
("Fullscreen", "Celozaslonski način"),
("Mobile Actions", "Dejanja za prenosne naprave"),
("Select Monitor", "Izberite zaslon"),
("Control Actions", "Dejanja za nadzor"),
("Display Settings", "Nastavitve zaslona"),
("Ratio", "Razmerje"),
("Image Quality", "Kakovost slike"),
("Scroll Style", "Način drsenja"),
("Show Menubar", "Prikaži meni"),
("Hide Menubar", "Skrij meni"),
("Direct Connection", "Neposredna povezava"),
("Relay Connection", "Posredovana povezava"),
("Secure Connection", "Zavarovana povezava"),
("Insecure Connection", "Nezavarovana povezava"),
("Scale original", "Originalna velikost"),
("Scale adaptive", "Prilagojena velikost"),
("General", "Splošno"),
("Security", "Varnost"),
("Theme", "Tema"),
("Dark Theme", "Temna tema"),
("Dark", "Temna"),
("Light", "Svetla"),
("Follow System", "Sistemska"),
("Enable hardware codec", "Omogoči strojno pospeševanje"),
("Unlock Security Settings", "Odkleni varnostne nastavitve"),
("Enable Audio", "Omogoči zvok"),
("Unlock Network Settings", "Odkleni mrežne nastavitve"),
("Server", "Strežnik"),
("Direct IP Access", "Neposredni dostop preko IPja"),
("Proxy", "Posredniški strežnik"),
("Apply", "Uveljavi"),
("Disconnect all devices?", "Odklopi vse naprave?"),
("Clear", "Počisti"),
("Audio Input Device", "Vhodna naprava za zvok"),
("Deny remote access", "Onemogoči oddaljeni dostop"),
("Use IP Whitelisting", "Omogoči seznam dovoljenih IP naslovov"),
("Network", "Mreža"),
("Enable RDP", "Omogoči RDP"),
("Pin menubar", "Pripni menijsko vrstico"),
("Unpin menubar", "Odpni menijsko vrstico"),
("Recording", "Snemanje"),
("Directory", "Imenik"),
("Automatically record incoming sessions", "Samodejno snemaj vhodne seje"),
("Change", "Spremeni"),
("Start session recording", "Začni snemanje seje"),
("Stop session recording", "Ustavi snemanje seje"),
("Enable Recording Session", "Omogoči snemanje seje"),
("Allow recording session", "Dovoli snemanje seje"),
("Enable LAN Discovery", "Omogoči odkrivanje lokalnega omrežja"),
("Deny LAN Discovery", "Onemogoči odkrivanje lokalnega omrežja"),
("Write a message", "Napiši spoorčilo"),
("Prompt", "Poziv"),
("Please wait for confirmation of UAC...", "Počakajte za potrditev nadzora uporabniškega računa"),
("elevated_foreground_window_tip", "Trenutno aktivno okno na oddaljenem računalniku zahteva višje pravice za upravljanje. Oddaljenega uporabnika lahko prosite, da okno minimizira, ali pa kliknite gumb za povzdig pravic v oknu za upravljanje povezave. Če se želite izogniti temu problemu, na oddaljenem računalniku RustDesk namestite."),
("Disconnected", "Brez povezave"),
("Other", "Drugo"),
("Confirm before closing multiple tabs", "Zahtevajte potrditev pred zapiranjem večih zavihkov"),
("Keyboard Settings", "Nastavitve tipkovnice"),
("Full Access", "Poln dostop"),
("Screen Share", "Deljenje zaslona"),
("Wayland requires Ubuntu 21.04 or higher version.", "Wayland zahteva Ubuntu 21.04 ali novejši"),
("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Zahtevana je novejša različica Waylanda. Posodobite vašo distribucijo ali pa uporabite X11."),
("JumpLink", "Pogled"),
("Please Select the screen to be shared(Operate on the peer side).", "Izberite zaslon za delitev (na oddaljeni strani)."),
("Show RustDesk", "Prikaži RustDesk"),
("This PC", "Ta računalnik"),
("or", "ali"),
("Continue with", "Nadaljuj z"),
("Elevate", "Povzdig pravic"),
("Zoom cursor", "Prilagodi velikost miškinega kazalca"),
("Accept sessions via password", "Sprejmi seje z geslom"),
("Accept sessions via click", "Sprejmi seje s potrditvijo"),
("Accept sessions via both", "Sprejmi seje z geslom ali potrditvijo"),
("Please wait for the remote side to accept your session request...", "Počakajte, da oddaljeni računalnik sprejme povezavo..."),
("One-time Password", "Enkratno geslo"),
("Use one-time password", "Uporabi enkratno geslo"),
("One-time password length", "Dolžina enkratnega gesla"),
("Request access to your device", "Zahtevaj dostop do svoje naprave"),
("Hide connection management window", "Skrij okno za upravljanje povezave"),
("hide_cm_tip", "Dovoli skrivanje samo pri sprejemanju sej z geslom"),
("wayland_experiment_tip", "Podpora za Wayland je v preizkusni fazi. Uporabite X11, če rabite nespremljan dostop."),
("Right click to select tabs", "Desno-kliknite za izbiro zavihkov"),
("Skipped", "Izpuščeno"),
("Add to Address Book", "Dodaj v adresar"),
("Group", "Skupina"),
("Search", "Iskanje"),
("Closed manually by the web console", "Ročno zaprto iz spletne konzole"),
("Local keyboard type", "Lokalna vrsta tipkovnice"),
("Select local keyboard type", "Izberite lokalno vrsto tipkovnice"),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", "ถูกปิดโดยเว็บคอนโซล"),
("Local keyboard type", "ประเภทคีย์บอร์ด"),
("Select local keyboard type", "เลือกประเภทคีย์บอร์ด"),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", "被web控制台手動關閉"),
("Local keyboard type", "本地鍵盤類型"),
("Select local keyboard type", "請選擇本地鍵盤類型"),
("software_render_tip", "如果你使用英偉達顯卡, 並且遠程窗口在會話建立後會立刻關閉, 那麼安裝nouveau驅動並且選擇使用軟件渲染可能會有幫助。重啟軟件後生效。"),
("Always use software rendering", "使用軟件渲染"),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -410,5 +410,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Closed manually by the web console", ""),
("Local keyboard type", ""),
("Select local keyboard type", ""),
("software_render_tip", ""),
("Always use software rendering", ""),
("config_input", ""),
].iter().cloned().collect();
}

View File

@@ -717,3 +717,92 @@ pub fn get_double_click_time() -> u32 {
}
}
/// forever: may not work
pub fn system_message(title: &str, msg: &str, forever: bool) -> ResultType<()> {
if std::process::Command::new("notify-send")
.arg(title)
.arg(msg)
.spawn()
.is_ok()
{
return Ok(());
}
if std::process::Command::new("zenity")
.arg("--info")
.arg("--timeout")
.arg(if forever { "0" } else { "3" })
.arg("--title")
.arg(title)
.arg("--text")
.arg(msg)
.spawn()
.is_ok()
{
return Ok(());
}
if std::process::Command::new("kdialog")
.arg("--title")
.arg(title)
.arg("--msgbox")
.arg(msg)
.spawn()
.is_ok()
{
return Ok(());
}
if std::process::Command::new("xmessage")
.arg("-center")
.arg("-timeout")
.arg(if forever { "0" } else { "3" })
.arg(title)
.arg(msg)
.spawn()
.is_ok()
{
return Ok(());
}
bail!("failed to post system message");
}
extern "C" fn breakdown_signal_handler(sig: i32) {
let mut stack = vec![];
backtrace::trace(|frame| {
backtrace::resolve_frame(frame, |symbol| {
if let Some(name) = symbol.name() {
stack.push(name.to_string());
}
});
true // keep going to the next frame
});
let mut info = String::default();
if stack.iter().any(|s| {
s.contains(&"nouveau_pushbuf_kick")
|| s.to_lowercase().contains("nvidia")
|| s.contains("gdk_window_end_draw_frame")
}) {
hbb_common::config::Config::set_option(
"allow-always-software-render".to_string(),
"Y".to_string(),
);
info = "Always use software rendering will be set.".to_string();
log::info!("{}", info);
}
log::error!(
"Got signal {} and exit. stack:\n{}",
sig,
stack.join("\n").to_string()
);
system_message(
"RustDesk",
&format!("Got signal {} and exit.{}", sig, info),
true,
)
.ok();
std::process::exit(0);
}
pub fn register_breakdown_handler() {
unsafe {
libc::signal(libc::SIGSEGV, breakdown_signal_handler as _);
}
}

36
src/platform/macos.mm Normal file
View File

@@ -0,0 +1,36 @@
#import <AVFoundation/AVFoundation.h>
#import <AppKit/AppKit.h>
#import <IOKit/hidsystem/IOHIDLib.h>
// https://github.com/codebytere/node-mac-permissions/blob/main/permissions.mm
extern "C" bool InputMonitoringAuthStatus(bool prompt) {
if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_15) {
IOHIDAccessType theType = IOHIDCheckAccess(kIOHIDRequestTypeListenEvent);
NSLog(@"IOHIDCheckAccess = %d, kIOHIDAccessTypeGranted = %d", theType, kIOHIDAccessTypeGranted);
switch (theType) {
case kIOHIDAccessTypeGranted:
return true;
break;
case kIOHIDAccessTypeDenied: {
if (prompt) {
NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_ListenEvent";
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]];
}
break;
}
case kIOHIDAccessTypeUnknown: {
if (prompt) {
bool result = IOHIDRequestAccess(kIOHIDRequestTypeListenEvent);
NSLog(@"IOHIDRequestAccess result = %d", result);
}
break;
}
default:
break;
}
} else {
return true;
}
return false;
}

View File

@@ -32,6 +32,7 @@ extern "C" {
fn CGEventGetLocation(e: *const c_void) -> CGPoint;
static kAXTrustedCheckOptionPrompt: CFStringRef;
fn AXIsProcessTrustedWithOptions(options: CFDictionaryRef) -> BOOL;
fn InputMonitoringAuthStatus(_: BOOL) -> BOOL;
}
pub fn is_process_trusted(prompt: bool) -> bool {
@@ -47,6 +48,13 @@ pub fn is_process_trusted(prompt: bool) -> bool {
}
}
pub fn is_can_input_monitoring(prompt: bool) -> bool {
unsafe {
let value = if prompt { YES } else { NO };
InputMonitoringAuthStatus(value) == YES
}
}
// macOS >= 10.15
// https://stackoverflow.com/questions/56597221/detecting-screen-recording-settings-on-macos-catalina/
// remove just one app from all the permissions: tccutil reset All com.carriez.rustdesk

View File

@@ -556,27 +556,39 @@ pub fn handle_mouse_(evt: &MouseEvent) {
en.mouse_move_to(evt.x, evt.y);
}
1 => match buttons {
1 => {
0x01 => {
allow_err!(en.mouse_down(MouseButton::Left));
}
2 => {
0x02 => {
allow_err!(en.mouse_down(MouseButton::Right));
}
4 => {
0x04 => {
allow_err!(en.mouse_down(MouseButton::Middle));
}
0x08 => {
allow_err!(en.mouse_down(MouseButton::Back));
}
0x10 => {
allow_err!(en.mouse_down(MouseButton::Forward));
}
_ => {}
},
2 => match buttons {
1 => {
0x01 => {
en.mouse_up(MouseButton::Left);
}
2 => {
0x02 => {
en.mouse_up(MouseButton::Right);
}
4 => {
0x04 => {
en.mouse_up(MouseButton::Middle);
}
0x08 => {
en.mouse_up(MouseButton::Back);
}
0x10 => {
en.mouse_up(MouseButton::Forward);
}
_ => {}
},
3 | 4 => {

View File

@@ -582,6 +582,14 @@ pub fn is_installed_daemon(_prompt: bool) -> bool {
return true;
}
#[inline]
pub fn is_can_input_monitoring(_prompt: bool) -> bool {
#[cfg(target_os = "macos")]
return crate::platform::macos::is_can_input_monitoring(_prompt);
#[cfg(not(target_os = "macos"))]
return true;
}
#[inline]
pub fn get_error() -> String {
#[cfg(not(any(feature = "cli")))]