Skip to content
Commits on Source (18)
gnome-remote-desktop (42.2-0ubuntu1) jammy; urgency=medium
* New upstream release (LP: #1976547)
-- Jeremy Bicha <jbicha@ubuntu.com> Mon, 06 Jun 2022 10:47:42 -0400
gnome-remote-desktop (42.1.1-0ubuntu1) jammy; urgency=medium
* New upstream release (LP: #1970662)
......
project('gnome-remote-desktop', 'c',
version: '42.1.1',
version: '42.2',
meson_version: '>= 0.47.0',
default_options: ['warning_level=1',
'buildtype=debugoptimized'])
......
......@@ -21,10 +21,12 @@ hu
id
is
it
ka
kk
ko
lt
nb
ne
nl
oc
pa
......
......@@ -9,18 +9,18 @@ msgstr ""
"Project-Id-Version: gnome-remote-desktop master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/"
"issues\n"
"POT-Creation-Date: 2021-07-13 09:47+0000\n"
"PO-Revision-Date: 2021-08-12 21:48+0200\n"
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
"POT-Creation-Date: 2022-05-09 07:39+0000\n"
"PO-Revision-Date: 2022-05-22 00:53+0200\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: German <gnome-de@gnome.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.0\n"
"X-Generator: Poedit 3.0.1\n"
#: src/grd-daemon.c:351
#: src/grd-daemon.c:480
msgid "GNOME Remote Desktop"
msgstr "GNOME Remote Desktop"
......@@ -46,12 +46,140 @@ msgstr "Abweisen"
msgid "Accept"
msgstr "Akzeptieren"
#: src/grd-ctl.c:44
#, c-format
msgid "Usage: %s [OPTIONS...] COMMAND [SUBCOMMAND]...\n"
msgstr "Aufruf: %s [OPTIONEN …] BEFEHL [UNTERBEFEHL] …\n"
#: src/grd-ctl.c:383
msgid "Commands:\n"
msgstr "Befehle:\n"
#: src/grd-ctl.c:388
msgid ""
" rdp - RDP subcommands:\n"
" enable - Enable the RDP backend\n"
" disable - Disable the RDP backend\n"
" set-tls-cert <path-to-cert> - Set path to TLS certificate\n"
" set-tls-key <path-to-key> - Set path to TLS key\n"
" set-credentials <username> <password> - Set username and password\n"
" credentials\n"
" clear-credentials - Clear username and password\n"
" credentials\n"
" enable-view-only - Disable remote control of "
"input\n"
" devices\n"
" disable-view-only - Enable remote control of "
"input\n"
" devices\n"
"\n"
msgstr ""
" rdp - RDP-Unterbefehle:\n"
" enable - RDP-Backend aktivieren\n"
" disable - RDP-Backend deaktivieren\n"
" set-tls-cert <pfad-zu-zertifikat> - Pfad zum TLS-Zertifikat "
"festlegen\n"
" set-tls-key <pfad-zu-schlüssel> - Pfad zum TLS-Schlüssel "
"festlegen\n"
" set-credentials <Benutzername> <Passwort> - Nutzername und Passwort "
"festlegen\n"
" clear-credentials - Nutzername und Passwort "
"löschen\n"
" enable-view-only - Fernsteuerung mittels "
"Eingabegeräten deaktivieren\n"
" disable-view-only - Fernsteuerung mittels "
"Eingabegeräten aktivieren\n"
"\n"
#: src/grd-ctl.c:407
msgid ""
" vnc - VNC subcommands:\n"
" enable - Enable the VNC backend\n"
" disable - Disable the VNC backend\n"
" set-password <password> - Set the VNC password\n"
" clear-password - Clear the VNC password\n"
" set-auth-method password|prompt - Set the authorization method\n"
" enable-view-only - Disable remote control of "
"input\n"
" devices\n"
" disable-view-only - Enable remote control of "
"input\n"
" devices\n"
"\n"
msgstr ""
" vnc - VNC-Unterbefehle:\n"
" enable - VNC-Backend aktivieren\n"
" disable - VNC-Backend deaktivieren\n"
" set-password <Passwort> - VNC-Passwort festlegen\n"
" clear-password - VNC-Passwort löschen\n"
" set-auth-method password|prompt - Authentifizierungsmethode "
"festlegen\n"
" enable-view-only - Fernsteuerung von "
"Eingabegeräten deaktivieren\n"
" disable-view-only - Fernsteuerung von "
"Eingabegeräten aktivieren\n"
"\n"
#: src/grd-ctl.c:422
msgid ""
" status [--show-credentials] - Show current status\n"
"\n"
"Options:\n"
" --help - Print this help text\n"
msgstr ""
" status [--show-credentials] - Aktuellen Status anzeigen\n"
"\n"
"Optionen:\n"
" --help - Diesen Hilfetext anzeigen\n"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:7
msgid "Whether the RDP backend is enabled or not"
msgstr "Legt fest, ob das RDP-Backend aktiviert ist oder nicht"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:8
msgid "If set to to 'true' the RDP backend will be initialized."
msgstr "Wenn »wahr«, wird das RDP-Backend initialisiert."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:14
msgid "Screenshare mode of RDP connections"
msgstr "Art der Bildschirmfreigabe bei RDP-Verbindungen"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:15
msgid ""
"The screenshare mode specifies, whether the RDP backend mirrors the primary "
"screen, or whether a virtual monitor is created. For the initial resolution "
"of the virtual monitor, the RDP backend uses either the client core data "
"([MS-RDPBCGR] 2.2.1.3.2) or the client monitor data ([MS-RDPBCGR] "
"2.2.1.3.6), depending on what is available. When using a remote desktop "
"session with a virtual monitor, clients can resize the resolution of the "
"virtual monitor during a session with the Display Control Channel Extension "
"([MS-RDPEDISP]). Allowed screenshare modes include: * mirror-primary - "
"Record the primary monitor of the current user session. * extend - Create a "
"new virtual monitor and use it for the remote desktop session. The "
"resolution of this virtual monitor is derived from the monitor "
"configuration, submitted by the remote desktop client."
msgstr ""
"Die Art der Bildschirmfreigabe legt fest, ob das RDB-Backend den primären "
"Bildschirm spiegelt, oder ob ein virtueller Monitor erstellt wird. Das RDP-"
"Backend verwendet für die anfängliche Auflösung des virtuellen Monitors "
"entweder die Client Kerndaten ([MS-RDPBCGR] 2.2.1.3.2), oder die Client "
"Monitor-Daten ([MS-RDPBCGR] 2.2.1.3.6), je nachdem was verfügbar ist. Bei "
"Einsatz einer Freigabesitzung mit virtuellem Monitor können Clients die "
"Auflösung des virtuellen Monitors wärhend einer Sitzung mit der Display "
"Control Channel Erweiterung anpassen ([MS-RDPEDISP]). Mögliche Arten der "
"Bildschirmfreigabe sind:\n"
"* mirror-primary - Den primären Bildschirm der aktuellen Benutzersitzung "
"aufnehmen.\n"
"* extend - Einen neuen virtuellen Monitor erstellen und für die "
"Freigabesitzung verwenden. Die Auflösung der Monitors wird von der "
"Monitorkonfiguration abgeleitet, die vom Client übermittelt wurde."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:41
msgid "Path to the certificate file"
msgstr "Pfad zur Zertifikatsdatei"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:8
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:16
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:42
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:50
msgid ""
"In order to be able to use RDP with TLS Security, both the private key file "
"and the certificate file need to be provided to the RDP server."
......@@ -60,17 +188,17 @@ msgstr ""
"Schlüsseldatei als auch die Zertifikatsdatei dem RDP-Server bereitgestellt "
"werden."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:15
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:49
msgid "Path to the private key file"
msgstr "Pfad zur privaten Schlüsseldatei"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:23
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:33
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:57
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:74
msgid "Only allow remote connections to view the screen content"
msgstr ""
"Entfernten Verbindungen lediglich das Ansehen des Bildschirminhalts erlauben"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:24
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:58
msgid ""
"When view-only is true, remote RDP connections cannot manipulate input "
"devices (e.g. mouse and keyboard)."
......@@ -78,7 +206,15 @@ msgstr ""
"Wenn »Nur ansehen« wahr ist, können entfernte RDP-Verbindungen keine "
"Eingabegeräte manipulieren (z.B. Maus und Tastatur)."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:34
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:67
msgid "Whether the VNC backend is enabled or not"
msgstr "Legt fest, ob das VNC-Backend aktiviert ist oder nicht"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:68
msgid "If set to to 'true' the VNC backend will be initialized."
msgstr "Wenn »wahr«, wird das VNC-Backend initialisiert."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:75
msgid ""
"When view-only is true, remote VNC connections cannot manipulate input "
"devices (e.g. mouse and keyboard)."
......@@ -86,11 +222,11 @@ msgstr ""
"Wenn »Nur ansehen« wahr ist, können entfernte VNC-Verbindungen keine "
"Eingabegeräte manipulieren (z.B. Maus und Tastatur)."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:41
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:82
msgid "Method used to authenticate VNC connections"
msgstr "Zur Authentifizierung von VNC-Verbindungen genutzte Methode"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:42
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:83
msgid ""
"The VNC authentication method describes how a remote connection is "
"authenticated. It can currently be done in two different ways: * prompt - by "
......
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-remote-desktop\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/"
"issues\n"
"POT-Creation-Date: 2022-05-10 16:53+0000\n"
"PO-Revision-Date: 2022-05-13 06:48+0200\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <(nothing)>\n"
"Language: ka\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.0.1\n"
#: src/grd-daemon.c:480
msgid "GNOME Remote Desktop"
msgstr "GNOME Remote Desktop"
#: src/grd-prompt.c:124
#, c-format
msgid "Do you want to share your desktop?"
msgstr "გნებავთ თქვენი სამუშაო მაგიდის გაზიარება?"
#: src/grd-prompt.c:125
#, c-format
msgid ""
"A user on the computer '%s' is trying to remotely view or control your "
"desktop."
msgstr ""
"მომხმარებელი კომპიუტერიდან '%s' ცდილობს შორიდან ნახოს ან მართოს თქვენი "
"სამუშაო მაგიდა."
#: src/grd-prompt.c:131
msgid "Refuse"
msgstr "უარყოფა"
#: src/grd-prompt.c:136
msgid "Accept"
msgstr "დასტური"
#: src/grd-ctl.c:44
#, c-format
msgid "Usage: %s [OPTIONS...] COMMAND [SUBCOMMAND]...\n"
msgstr "გამოყენება: %s [პარამეტრები...] ბრძანება [ქვებრძანება]...\n"
#: src/grd-ctl.c:383
msgid "Commands:\n"
msgstr "ბრძანებები:\n"
#: src/grd-ctl.c:388
msgid ""
" rdp - RDP subcommands:\n"
" enable - Enable the RDP backend\n"
" disable - Disable the RDP backend\n"
" set-tls-cert <path-to-cert> - Set path to TLS certificate\n"
" set-tls-key <path-to-key> - Set path to TLS key\n"
" set-credentials <username> <password> - Set username and password\n"
" credentials\n"
" clear-credentials - Clear username and password\n"
" credentials\n"
" enable-view-only - Disable remote control of "
"input\n"
" devices\n"
" disable-view-only - Enable remote control of "
"input\n"
" devices\n"
"\n"
msgstr ""
" rdp - RDP-ის ქვებრძანებები:\n"
" enable - RDP-ის უკანაბოლოს ჩართვა\n"
" disable - RDP-ის უკანაბოლოს გამორთვა\n"
" set-tls-cert <path-to-cert> - ბილიკი TLS "
"სერტიფიკატის ფაილამდე\n"
" set-tls-key <path-to-key> - ბილიკი TLS "
"სერტიფიკატის გასაღებამდე\n"
" set-credentials <username> <password> - მომხმარებლისა და პაროლის "
"დაყენება\n"
" მომხმარებელი და პაროლი\n"
" clear-credentials - "
"მომხმარებლისა და პაროლის წაშლა\n"
" enable-view-only დაშორებული მომხმარებლისთვის ლოკალური "
"მოწყობილობების\n"
" მართვა\n"
" disable-view-obly - ლოკალური "
"მოწყობილობების\n"
" მართვის "
"უფლების მიცემა\n"
"\n"
#: src/grd-ctl.c:407
msgid ""
" vnc - VNC subcommands:\n"
" enable - Enable the VNC backend\n"
" disable - Disable the VNC backend\n"
" set-password <password> - Set the VNC password\n"
" clear-password - Clear the VNC password\n"
" set-auth-method password|prompt - Set the authorization method\n"
" enable-view-only - Disable remote control of "
"input\n"
" devices\n"
" disable-view-only - Enable remote control of "
"input\n"
" devices\n"
"\n"
msgstr ""
" vnc - VNC subcommands:\n"
" enable - Enable the VNC backend\n"
" disable - VNC-ის ქვებრძანებები\n"
" set-password <password> - VNC პაროლის დაყენება\n"
" clear-password - VNC პაროლის გასუფთავება\n"
" set-auth-method password|prompt - აირჩიეთ ავტორიზაციის მეთოდი\n"
" enable-view-only - მოწყობილობების დაშორებული "
"მართვის\n"
" გამორთვა\n"
" disable-view-only - შეყვანის ლოკალური "
"მოწყობილობების კონტროლის\n"
" უფლების მიცემა\n"
"\n"
#: src/grd-ctl.c:422
msgid ""
" status [--show-credentials] - Show current status\n"
"\n"
"Options:\n"
" --help - Print this help text\n"
msgstr ""
" სტატუსი [--show-credentials] - მიმდინარე სტატუსის ჩვენება\n"
"\n"
"პარამეტრები:\n"
" --help - ამ ტექსტის ჩვენება\n"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:7
msgid "Whether the RDP backend is enabled or not"
msgstr "ჩართულია RDP უკანა ბოლო თუ არა"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:8
msgid "If set to 'true' the RDP backend will be initialized."
msgstr "თუ ჩართულია, გამოყენებული იქნება RDP უკანაბოლო."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:14
msgid "Screenshare mode of RDP connections"
msgstr "RDP შეერთების ეკრანის გაზიარების რეჟიმი"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:15
msgid ""
"The screenshare mode specifies, whether the RDP backend mirrors the primary "
"screen, or whether a virtual monitor is created. For the initial resolution "
"of the virtual monitor, the RDP backend uses either the client core data "
"([MS-RDPBCGR] 2.2.1.3.2) or the client monitor data ([MS-RDPBCGR] "
"2.2.1.3.6), depending on what is available. When using a remote desktop "
"session with a virtual monitor, clients can resize the resolution of the "
"virtual monitor during a session with the Display Control Channel Extension "
"([MS-RDPEDISP]). Allowed screenshare modes include: * mirror-primary - "
"Record the primary monitor of the current user session. * extend - Create a "
"new virtual monitor and use it for the remote desktop session. The "
"resolution of this virtual monitor is derived from the monitor "
"configuration, submitted by the remote desktop client."
msgstr ""
"ეკრანის გაზიარების მეთოდი მიუთითებს, RDP უკანაბოლო ძირითადი ეკრანის "
"სარკისებურ ასლს იღებს თუ ახალი ვირტუალური ეკრანი იქმნება. ვირტუალური "
"მონიტორის საწყისი გაფართოებისთვის RDP უკანაბოლო ან კლიენტის ბირთვის "
"მონაცემებს იყენებს ([MS-RDPBCGR] 2.2.1.3.2), ან კლიენტის მონიტორის "
"მონაცემებს ([MS-RDPBCGR] 2.2.1.3.6), ხელმისაწვდომობის მიხედვით. თუ RDP_ს "
"ვირტუალური მონიტორით იყენებთ, კლიენტებს ვირტუალური მონიტორის ზომის შეცვლაც "
"შეიძლიათ ([MS-RDPEDISP]). ეკრანის გაზიარების რეჟიმებია: * mirror-primary "
"მიმდინარე მომხმარებლის ძირითადი ეკრანის ჩაწერა. * გაფართოება - დაშორებული "
"სამუშაო მაგიდის სესიისთვის ახალი ვირტუალური მონიტორის შექმნა. გაფართოება "
"მიიღება მონიტორის კონფიგურაციიდან, რომელიც კლიენტის მიერ იქნა მოწოდებული."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:41
msgid "Path to the certificate file"
msgstr "ბილიკი სერტიფიკატის ფაილამდე"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:42
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:50
msgid ""
"In order to be able to use RDP with TLS Security, both the private key file "
"and the certificate file need to be provided to the RDP server."
msgstr ""
"RDP-ის TLS უსაფრთხოების გამოსაყენებლად ორივე, პირადი გასაღების და "
"სერტიფიკატის ფაილის მითითებაა საჭირო."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:49
msgid "Path to the private key file"
msgstr "ბილიკი პირადი გასაღების ფაილამდე"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:57
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:74
msgid "Only allow remote connections to view the screen content"
msgstr "დაშორებული შეერთებებისთვის ეკრანის მხოლოდ ნახვის უფლების მიცემა"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:58
msgid ""
"When view-only is true, remote RDP connections cannot manipulate input "
"devices (e.g. mouse and keyboard)."
msgstr ""
"როცა ჩართულია მხოლოდ თვალიერების რეჟიმი, RDP შეერთებების შეყვანის ლოკალური "
"მოწყობილობების კონტროლი არ შეუძლიათ (თაგუნა, კლავიატურა)."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:67
msgid "Whether the VNC backend is enabled or not"
msgstr "ჩართულია VNC-ის უკანაბოლო თუ არა"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:68
msgid "If set to 'true' the VNC backend will be initialized."
msgstr "თუ ჩართულია, გამოყენებული იქნება VNC უკანაბოლო."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:75
msgid ""
"When view-only is true, remote VNC connections cannot manipulate input "
"devices (e.g. mouse and keyboard)."
msgstr ""
"როცა ჩართულია მხოლოდ თვალიერების რეჟიმი, VNC შეერთებების შეყვანის ლოკალური "
"მოწყობილობების კონტროლი არ შეუძლიათ (თაგუნა, კლავიატურა)."
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:82
msgid "Method used to authenticate VNC connections"
msgstr "VNC შეერთებების ავთენტიკაციის მეთოდი"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:83
msgid ""
"The VNC authentication method describes how a remote connection is "
"authenticated. It can currently be done in two different ways: * prompt - by "
"prompting the user for each new connection, requiring a person with physical "
"access to the workstation to explicitly approve the new connection. * "
"password - by requiring the remote client to provide a known password"
msgstr ""
"VNC ავთენტიფიკაციის მეთოდი აღწერს, თუ როგორ ხდება დაშორებული კავშირის "
"ავტორიზაცია. ამჟამად ეს შეიძლება გაკეთდეს ორი განსხვავებული გზით: * მოწოდება "
"- მომხმარებლის მოთხოვნით ყოველი ახალი კავშირის შესახებ, სამუშაო სადგურზე "
"ფიზიკური წვდომის მქონე პირისგან ახალი კავშირის ცალსახად დამტკიცების "
"მოთხოვნას. * პაროლი - დისტანციური კლიენტისგან ცნობილი პაროლის მოთხოვნით"
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Gnome Nepali Translation Project\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/"
"issues\n"
"POT-Creation-Date: 2022-05-02 10:47+0000\n"
"PO-Revision-Date: 2022-05-09 13:23+0545\n"
"Last-Translator: \n"
"Language-Team: Nepali Team <chautari@gmail.com>\n"
"Language: ne\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.0.1\n"
#: src/grd-daemon.c:480
msgid "GNOME Remote Desktop"
msgstr "जिनोम टाढाको डेस्कटप"
#: src/grd-prompt.c:124
#, c-format
msgid "Do you want to share your desktop?"
msgstr "तपाईँको डेस्कटप साझेदार गर्न चाहनुहुन्छ?"
#: src/grd-prompt.c:125
#, c-format
msgid ""
"A user on the computer '%s' is trying to remotely view or control your "
"desktop."
msgstr ""
"'%s' कम्प्युटरको एउटा प्रयोगकर्ताले टाढाबाट तपाईँको डेस्कटप हेर्ने वा नियन्त्रण गर्ने प्रयास "
"गरिरहेको छ ।"
#: src/grd-prompt.c:131
msgid "Refuse"
msgstr "अस्वीकार गर्नुहोस्"
#: src/grd-prompt.c:136
msgid "Accept"
msgstr "स्विकार गर्नुहोस्"
#: src/grd-ctl.c:44
#, c-format
msgid "Usage: %s [OPTIONS...] COMMAND [SUBCOMMAND]...\n"
msgstr "उपयोग: %s [OPTIONS...] आदेश [SUBCOMMAND]...\n"
#: src/grd-ctl.c:383
msgid "Commands:\n"
msgstr "आदेशहरू:\n"
#: src/grd-ctl.c:388
msgid ""
" rdp - RDP subcommands:\n"
" enable - Enable the RDP backend\n"
" disable - Disable the RDP backend\n"
" set-tls-cert <path-to-cert> - Set path to TLS certificate\n"
" set-tls-key <path-to-key> - Set path to TLS key\n"
" set-credentials <username> <password> - Set username and password\n"
" credentials\n"
" clear-credentials - Clear username and password\n"
" credentials\n"
" enable-view-only - Disable remote control of "
"input\n"
" devices\n"
" disable-view-only - Enable remote control of "
"input\n"
" devices\n"
"\n"
msgstr ""
" rdp - RDP सहायक आदेशहरू:\n"
" सक्षम - RDP ब्याकइन्ड सक्षम पार्नुहोस्\n"
" अक्षम - RDP ब्याकइन्ड अक्षम पार्नुहोस्\n"
" TLS सर्ट सेट गर्नुहोस् <path-to-cert> - TLS प्रमाणपत्रमा मार्ग सेट गर्नुहोस्\n"
" सेट-tls-कुञ्जी <path-to-key> - TLS कुञ्जीमा मार्ग सेट गर्नुहोस्\n"
" सेट-प्रमाणपत्र <username> <password> - प्रयोगकर्ता नाम र पासवर्ड सेट गर्नुहोस्\n"
" प्रमाणपत्र\n"
" खाली-प्रमाणपत्र - प्रयोगकर्ता नाम र पासवर्ड खाली गर्नुहोस्\n"
" प्रमाणपत्र\n"
" दृश्य-मात्र सक्षम पार्नुहोस् - आगतको टाढाको नियन्त्रण अक्षम पार्नुहोस्\n"
" यन्त्रहरू\n"
" दृश्य-मात्र अक्षम पार्नुहोस् - आगतको टाढाको नियन्त्रण सक्षम पार्नुहोस्\n"
" यन्त्रहरू\n"
"\n"
#: src/grd-ctl.c:407
msgid ""
" vnc - VNC subcommands:\n"
" enable - Enable the VNC backend\n"
" disable - Disable the VNC backend\n"
" set-password <password> - Set the VNC password\n"
" clear-password - Clear the VNC password\n"
" set-auth-method password|prompt - Set the authorization method\n"
" enable-view-only - Disable remote control of "
"input\n"
" devices\n"
" disable-view-only - Enable remote control of "
"input\n"
" devices\n"
"\n"
msgstr ""
" vnc - VNC सहायक आदेशहरू:\n"
" सक्षम - भीएनसी ब्याकइन्ड सक्षम पार्नुहोस्\n"
" अक्षम - भीएनसी ब्याकइन्ड अक्षम पार्नुहोस्\n"
" पासवर्ड सेट <password> गर्नुहोस् - भीएनसी पासवर्ड सेट गर्नुहोस्\n"
" खाली पासवर्ड - भीएनसी पासवर्ड खाली गर्नुहोस्\n"
" auth-method पासवर्ड सेट गर्नुहोस्|prompt - प्रमाणीकरण विधि सेट गर्नुहोस्\n"
" दृश्य-मात्र सक्षम पार्नुहोस् - आगतको टाढाको नियन्त्रण अक्षम पार्नुहोस्\n"
" यन्त्रहरू\n"
" दृश्य-मात्र अक्षम पार्नुहोस् - आगतको टाढाको नियन्त्रण सक्षम पार्नुहोस्\n"
" यन्त्रहरू\n"
"\n"
#: src/grd-ctl.c:422
msgid ""
" status [--show-credentials] - Show current status\n"
"\n"
"Options:\n"
" --help - Print this help text\n"
msgstr ""
" status [--show-credentials] - हालको वस्तुस्थिति देखाउनुहोस्\n"
"\n"
"विकल्पहरू:\n"
" --help - यो मद्दत पाठ मुद्रण गर्नुहोस्\n"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:7
msgid "Whether the RDP backend is enabled or not"
msgstr "RDP ब्याकइन्ड सक्षम पारिएको छ या छैन"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:8
msgid "If set to to 'true' the RDP backend will be initialized."
msgstr "यदि 'सही' मा सेट गरेमा RDP ब्याकइन्ड सुरुआत हुनेछ ।"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:14
msgid "Screenshare mode of RDP connections"
msgstr "RDP जडानको स्क्रिनसेयर मोड"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:15
msgid ""
"The screenshare mode specifies, whether the RDP backend mirrors the primary "
"screen, or whether a virtual monitor is created. For the initial resolution "
"of the virtual monitor, the RDP backend uses either the client core data "
"([MS-RDPBCGR] 2.2.1.3.2) or the client monitor data ([MS-RDPBCGR] "
"2.2.1.3.6), depending on what is available. When using a remote desktop "
"session with a virtual monitor, clients can resize the resolution of the "
"virtual monitor during a session with the Display Control Channel Extension "
"([MS-RDPEDISP]). Allowed screenshare modes include: * mirror-primary - "
"Record the primary monitor of the current user session. * extend - Create a "
"new virtual monitor and use it for the remote desktop session. The "
"resolution of this virtual monitor is derived from the monitor "
"configuration, submitted by the remote desktop client."
msgstr ""
"स्क्रिनसेयर मोडले निर्दिष्ट गर्दछ, कि आरडीपी ब्याकइन्डले प्राथमिक पर्दा दर्पण गर्दछ, वा "
"अवास्तविक मोनिटर सिर्जना गरिएको छ । वर्चुअल मोनिटरको प्रारम्भिक रिजोल्युसनका लागि, "
"RDP ब्याकइन्डले या त क्लाइन्ट कोर डेटा ([MS-RDPBCGR] 2.2.1.3.2) वा क्लाइन्ट मोनिटर "
"डेटा ([MS-RDPBCGR] 2.2.1.3.6) प्रयोग गर्दछ, जुन उपलब्ध छ त्यसको आधारमा। अवास्तविक "
"मोनिटरसँग टाढाको डेस्कटप सत्र प्रयोग गर्दा, क्लाइन्टले प्रदर्शन नियन्त्रण च्यानल विस्तार "
"([MS-RDPEDISP]) सँगको सत्रको दौडान अवास्तविक मोनिटरको रिजोल्युसन रिसाइज गर्न सक्दछ "
"। अनुमति प्राप्त स्क्रिनसेयर मोडहरू समावेश छन्: * मिरर-प्राथमिक - हालको प्रयोगकर्ता "
"सत्रको प्राथमिक मोनिटर रेकर्ड गर्नुहोस् । * विस्तार - नयाँ भर्चुअल मनिटर सिर्जना गर्नुहोस् "
"र यसलाई टाढाको डेस्कटप सत्रका लागि प्रयोग गर्नुहोस्। यो अवास्तविक मोनिटरको रिजोल्युसन "
"टाढाको डेस्कटप क्लाइन्टद्वारा पेश गरिएको, मोनिटर कन्फिगरेसनबाट लिइएको हो ।"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:41
msgid "Path to the certificate file"
msgstr "प्रमाणपत्र फाइलमा मार्ग"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:42
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:50
msgid ""
"In order to be able to use RDP with TLS Security, both the private key file "
"and the certificate file need to be provided to the RDP server."
msgstr ""
"TLS सुरक्षासँग RDP प्रयोग गर्न सक्षम हुनका लागि, दुबै निजी कुञ्जी फाइल र प्रमाणपत्र फाइल "
"RDP सर्भरमा उपलब्ध गराउनु आवश्यक छ ।"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:49
msgid "Path to the private key file"
msgstr "व्यक्तिगत कुञ्जी फाइलमा मार्ग"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:57
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:74
msgid "Only allow remote connections to view the screen content"
msgstr "पर्दा सामाग्री हेर्नका लागि टाढाको जडानलाई मात्र अनुमति दिनुहोस्"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:58
msgid ""
"When view-only is true, remote RDP connections cannot manipulate input "
"devices (e.g. mouse and keyboard)."
msgstr ""
"दृश्य मात्र सही भएको बेलामा, टाढाको RDP जडानले आगत यन्त्रहरू (उदाहरणका लागि माउस र "
"कुञ्जीपाटी) मिलाउन सक्दैन ।"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:67
msgid "Whether the VNC backend is enabled or not"
msgstr "भीएनसी ब्याकइन्ड सक्षम पारिएको छ वा छैन"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:68
msgid "If set to to 'true' the VNC backend will be initialized."
msgstr "यदि 'सही' मा सेट भयो भने भीएनसी ब्याकइन्ड सुरुआत हुनेछ ।"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:75
msgid ""
"When view-only is true, remote VNC connections cannot manipulate input "
"devices (e.g. mouse and keyboard)."
msgstr ""
"दृश्य मात्र सत्य भएको बेलामा, टाढाको भीएनसी जडानले आगत यन्त्रहरू (उदाहरणका लागि माउस "
"र कुञ्जीपाटी) मिलाउन सक्दैन ।"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:82
msgid "Method used to authenticate VNC connections"
msgstr "भीएनसी जडान प्रमाणिकरण गर्न प्रयोग गरिने विधि"
#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:83
msgid ""
"The VNC authentication method describes how a remote connection is "
"authenticated. It can currently be done in two different ways: * prompt - by "
"prompting the user for each new connection, requiring a person with physical "
"access to the workstation to explicitly approve the new connection. * "
"password - by requiring the remote client to provide a known password"
msgstr ""
"VNC प्रमाणीकरण विधिले कसरी टाढाको जडान प्रमाणिकरण हुन्छ वर्णन गर्दछ । यो हाल दुई फरक "
"तरिकाले गर्न सकिन्छ: * प्रोम्प्ट - प्रत्येक नयाँ जडानका लागि प्रयोगकर्तालाई प्रेरित गरेर, "
"नयाँ जडानलाई स्पष्ट रूपमा अनुमोदन गर्न कार्यस्थानमा भौतिक पहुँच भएको व्यक्तिको आवश्यकता "
"पर्दछ । * पासवर्ड - ज्ञात पासवर्ड प्रदान गर्न टाढाको क्लाइन्ट आवश्यक द्वारा"
......@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: gnome-remote-desktop master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/"
"issues\n"
"POT-Creation-Date: 2022-03-15 19:40+0000\n"
"PO-Revision-Date: 2022-03-16 15:04+0100\n"
"POT-Creation-Date: 2022-05-09 07:39+0000\n"
"PO-Revision-Date: 2022-05-26 20:05+0200\n"
"Last-Translator: Quentin PAGÈS\n"
"Language-Team: Occitan <totenoc@gmail.com>\n"
"Language: oc\n"
......@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0.1\n"
#: src/grd-daemon.c:423
#: src/grd-daemon.c:480
msgid "GNOME Remote Desktop"
msgstr "Burèu distant de GNOME"
......@@ -72,6 +72,22 @@ msgid ""
" devices\n"
"\n"
msgstr ""
" rdp - Jos comandas :\n"
" enable - Activar lo backend RDP\n"
" disable - Desactivar lo backend RDP\n"
" set-tls-cert <path-to-cert> - Definir emplaçament "
"certificat TLS\n"
" set-tls-key <path-to-key> - Definir emplaçament clau TLS\n"
" set-credentials <username> <password> - Definir nom utilizaire e "
"senhal\n"
" clear-credentials - Escafar nom utilizaire e "
"senhal\n"
"\n"
" enable-view-only - Desactivar las entras del "
"periferic del contròla a distància\n"
" disable-view-only - Activar las entras del "
"periferic del contròla a distància\n"
"\n"
#: src/grd-ctl.c:407
msgid ""
......
......@@ -37,6 +37,7 @@
#define ENC_TIMES_CHECK_INTERVAL_MS 1000
#define MAX_TRACKED_ENC_FRAMES 1000
#define MIN_BW_MEASURE_SIZE (10 * 1024)
typedef enum _HwAccelAPI
{
......@@ -509,6 +510,8 @@ refresh_gfx_surface_avc420 (GrdRdpGraphicsPipeline *graphics_pipeline,
int64_t *enc_time_us)
{
RdpgfxServerContext *rdpgfx_context = graphics_pipeline->rdpgfx_context;
GrdRdpNetworkAutodetection *network_autodetection =
graphics_pipeline->network_autodetection;
GrdRdpGfxSurface *gfx_surface = rdp_surface->gfx_surface;
GrdRdpGfxSurface *render_surface =
grd_rdp_gfx_surface_get_render_surface (gfx_surface);
......@@ -529,6 +532,7 @@ refresh_gfx_surface_avc420 (GrdRdpGraphicsPipeline *graphics_pipeline,
cairo_region_t *region;
uint32_t surface_serial;
int64_t enc_ack_time_us;
gboolean pending_bw_measure_stop = FALSE;
int i;
if (!rdp_surface->valid)
......@@ -629,6 +633,13 @@ refresh_gfx_surface_avc420 (GrdRdpGraphicsPipeline *graphics_pipeline,
}
g_mutex_unlock (&graphics_pipeline->gfx_mutex);
if (network_autodetection &&
(4 + avc420.meta.numRegionRects * 10 + avc420.length) >= MIN_BW_MEASURE_SIZE)
{
pending_bw_measure_stop =
grd_rdp_network_autodetection_try_bw_measure_start (network_autodetection);
}
rdpgfx_context->StartFrame (rdpgfx_context, &cmd_start);
rdpgfx_context->SurfaceCommand (rdpgfx_context, &cmd);
......@@ -639,6 +650,9 @@ refresh_gfx_surface_avc420 (GrdRdpGraphicsPipeline *graphics_pipeline,
}
rdpgfx_context->EndFrame (rdpgfx_context, &cmd_end);
if (pending_bw_measure_stop)
grd_rdp_network_autodetection_queue_bw_measure_stop (network_autodetection);
*enc_time_us = enc_ack_time_us;
g_free (avc420.data);
......@@ -788,6 +802,8 @@ refresh_gfx_surface_rfx_progressive (GrdRdpGraphicsPipeline *graphics_pipeline,
{
RdpgfxServerContext *rdpgfx_context = graphics_pipeline->rdpgfx_context;
GrdSessionRdp *session_rdp = graphics_pipeline->session_rdp;
GrdRdpNetworkAutodetection *network_autodetection =
graphics_pipeline->network_autodetection;
GrdRdpGfxSurface *gfx_surface = rdp_surface->gfx_surface;
GrdRdpGfxFrameController *frame_controller =
grd_rdp_gfx_surface_get_frame_controller (gfx_surface);
......@@ -808,6 +824,7 @@ refresh_gfx_surface_rfx_progressive (GrdRdpGraphicsPipeline *graphics_pipeline,
uint32_t codec_context_id;
uint32_t surface_serial;
int64_t enc_ack_time_us;
gboolean pending_bw_measure_stop = FALSE;
int i;
region = grd_rdp_damage_detector_get_damage_region (rdp_surface->detector);
......@@ -910,9 +927,18 @@ refresh_gfx_surface_rfx_progressive (GrdRdpGraphicsPipeline *graphics_pipeline,
}
g_mutex_unlock (&graphics_pipeline->gfx_mutex);
if (network_autodetection && cmd.length >= MIN_BW_MEASURE_SIZE)
{
pending_bw_measure_stop =
grd_rdp_network_autodetection_try_bw_measure_start (network_autodetection);
}
rdpgfx_context->SurfaceFrameCommand (rdpgfx_context, &cmd,
&cmd_start, &cmd_end);
if (pending_bw_measure_stop)
grd_rdp_network_autodetection_queue_bw_measure_stop (network_autodetection);
*enc_time_us = enc_ack_time_us;
cairo_region_destroy (region);
......@@ -1425,9 +1451,11 @@ grd_rdp_graphics_pipeline_new (GrdSessionRdp *session_rdp,
rdpgfx_context->rdpcontext = rdp_context;
rdpgfx_context->custom = graphics_pipeline;
g_mutex_lock (&graphics_pipeline->gfx_mutex);
if (rdp_context->settings->NetworkAutoDetect &&
!graphics_pipeline->rtt_pause_source)
ensure_rtt_receivement (graphics_pipeline);
g_mutex_unlock (&graphics_pipeline->gfx_mutex);
return graphics_pipeline;
}
......
......@@ -25,16 +25,26 @@
#include "grd-rdp-private.h"
#define BW_MEASURE_SEQUENCE_NUMBER 0
#define MIN_NW_CHAR_RES_INTERVAL_US G_USEC_PER_SEC
#define PING_INTERVAL_HIGH_MS 70
#define PING_INTERVAL_LOW_MS 700
#define RTT_AVG_PERIOD_US (500 * 1000)
typedef enum _PingInterval
{
PING_INTERVAL_NONE,
PING_INTERVAL_HIGH,
PING_INTERVAL_LOW,
} PingInterval;
typedef enum _BwMeasureState
{
BW_MEASURE_STATE_NONE,
BW_MEASURE_STATE_PENDING_STOP,
BW_MEASURE_STATE_QUEUED_STOP,
BW_MEASURE_STATE_PENDING_RESULTS,
} BwMeasureState;
typedef struct _PingInfo
{
uint16_t sequence_number;
......@@ -68,6 +78,13 @@ struct _GrdRdpNetworkAutodetection
GQueue *round_trip_times;
PingInterval ping_interval;
GMutex bw_measure_mutex;
uint32_t measured_bandwidth;
BwMeasureState bw_measure_state;
HANDLE bw_measure_stop_event;
int64_t last_nw_char_res_notification_us;
uint16_t next_sequence_number;
};
......@@ -104,6 +121,16 @@ is_active_high_nec_rtt_consumer (GrdRdpNetworkAutodetection *network_autodete
return FALSE;
}
static gboolean
has_active_high_nec_rtt_consumers (GrdRdpNetworkAutodetection *network_autodetection)
{
if (is_active_high_nec_rtt_consumer (network_autodetection,
GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_RDPGFX))
return TRUE;
return FALSE;
}
static uint16_t
get_next_free_sequence_number (GrdRdpNetworkAutodetection *network_autodetection)
{
......@@ -146,30 +173,26 @@ emit_ping (gpointer user_data)
static void
update_ping_source (GrdRdpNetworkAutodetection *network_autodetection)
{
GrdRdpNwAutodetectRTTConsumer active_high_nec_rtt_consumers;
PingInterval new_ping_interval_type;
uint32_t ping_interval_ms;
active_high_nec_rtt_consumers = GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_NONE;
if (is_active_high_nec_rtt_consumer (
network_autodetection, GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_RDPGFX))
active_high_nec_rtt_consumers |= GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_RDPGFX;
if (active_high_nec_rtt_consumers)
if (network_autodetection->rtt_consumers == GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_NONE)
new_ping_interval_type = PING_INTERVAL_NONE;
else if (has_active_high_nec_rtt_consumers (network_autodetection))
new_ping_interval_type = PING_INTERVAL_HIGH;
else
new_ping_interval_type = PING_INTERVAL_LOW;
if ((network_autodetection->rtt_consumers == GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_NONE ||
network_autodetection->ping_interval != new_ping_interval_type) &&
if (network_autodetection->ping_interval != new_ping_interval_type &&
network_autodetection->ping_source)
{
g_source_destroy (network_autodetection->ping_source);
g_clear_pointer (&network_autodetection->ping_source, g_source_unref);
}
if (network_autodetection->rtt_consumers == GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_NONE ||
network_autodetection->ping_interval == new_ping_interval_type)
network_autodetection->ping_interval = new_ping_interval_type;
if (network_autodetection->ping_interval == PING_INTERVAL_NONE)
return;
g_assert (!network_autodetection->ping_source);
......@@ -177,6 +200,8 @@ update_ping_source (GrdRdpNetworkAutodetection *network_autodetection)
switch (new_ping_interval_type)
{
case PING_INTERVAL_NONE:
g_assert_not_reached ();
case PING_INTERVAL_HIGH:
ping_interval_ms = PING_INTERVAL_HIGH_MS;
break;
......@@ -189,7 +214,6 @@ update_ping_source (GrdRdpNetworkAutodetection *network_autodetection)
g_source_set_callback (network_autodetection->ping_source, emit_ping,
network_autodetection, NULL);
g_source_attach (network_autodetection->ping_source, NULL);
network_autodetection->ping_interval = new_ping_interval_type;
}
void
......@@ -199,8 +223,7 @@ grd_rdp_network_autodetection_ensure_rtt_consumer (GrdRdpNetworkAutodetection
g_assert (rtt_consumer != GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_NONE);
g_mutex_lock (&network_autodetection->consumer_mutex);
if (!has_rtt_consumer (network_autodetection, rtt_consumer))
network_autodetection->rtt_consumers |= rtt_consumer;
network_autodetection->rtt_consumers |= rtt_consumer;
update_ping_source (network_autodetection);
g_mutex_unlock (&network_autodetection->consumer_mutex);
......@@ -210,6 +233,8 @@ void
grd_rdp_network_autodetection_remove_rtt_consumer (GrdRdpNetworkAutodetection *network_autodetection,
GrdRdpNwAutodetectRTTConsumer rtt_consumer)
{
g_assert (rtt_consumer != GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_NONE);
g_mutex_lock (&network_autodetection->consumer_mutex);
network_autodetection->rtt_consumers &= ~rtt_consumer;
......@@ -255,6 +280,59 @@ grd_rdp_network_autodetection_set_rtt_consumer_necessity (GrdRdpNetworkAutodetec
g_mutex_unlock (&network_autodetection->consumer_mutex);
}
gboolean
grd_rdp_network_autodetection_try_bw_measure_start (GrdRdpNetworkAutodetection *network_autodetection)
{
rdpAutoDetect *rdp_autodetect = network_autodetection->rdp_autodetect;
g_autoptr (GMutexLocker) locker = NULL;
locker = g_mutex_locker_new (&network_autodetection->bw_measure_mutex);
if (network_autodetection->bw_measure_state != BW_MEASURE_STATE_NONE)
return FALSE;
network_autodetection->bw_measure_state = BW_MEASURE_STATE_PENDING_STOP;
g_clear_pointer (&locker, g_mutex_locker_free);
rdp_autodetect->BandwidthMeasureStart (network_autodetection->rdp_context,
BW_MEASURE_SEQUENCE_NUMBER);
return TRUE;
}
void
grd_rdp_network_autodetection_bw_measure_stop (GrdRdpNetworkAutodetection *network_autodetection)
{
rdpAutoDetect *rdp_autodetect = network_autodetection->rdp_autodetect;
g_mutex_lock (&network_autodetection->bw_measure_mutex);
g_assert (network_autodetection->bw_measure_state == BW_MEASURE_STATE_PENDING_STOP ||
network_autodetection->bw_measure_state == BW_MEASURE_STATE_QUEUED_STOP);
ResetEvent (network_autodetection->bw_measure_stop_event);
network_autodetection->bw_measure_state = BW_MEASURE_STATE_PENDING_RESULTS;
g_mutex_unlock (&network_autodetection->bw_measure_mutex);
rdp_autodetect->BandwidthMeasureStop (network_autodetection->rdp_context,
BW_MEASURE_SEQUENCE_NUMBER);
}
void
grd_rdp_network_autodetection_queue_bw_measure_stop (GrdRdpNetworkAutodetection *network_autodetection)
{
g_mutex_lock (&network_autodetection->bw_measure_mutex);
g_assert (network_autodetection->bw_measure_state == BW_MEASURE_STATE_PENDING_STOP);
SetEvent (network_autodetection->bw_measure_stop_event);
network_autodetection->bw_measure_state = BW_MEASURE_STATE_QUEUED_STOP;
g_mutex_unlock (&network_autodetection->bw_measure_mutex);
}
HANDLE
grd_rdp_network_autodetection_get_bw_measure_stop_event_handle (GrdRdpNetworkAutodetection *network_autodetection)
{
return network_autodetection->bw_measure_stop_event;
}
static void
track_round_trip_time (GrdRdpNetworkAutodetection *network_autodetection,
int64_t ping_time_us,
......@@ -281,27 +359,75 @@ remove_old_round_trip_times (GrdRdpNetworkAutodetection *network_autodetection)
g_free (g_queue_pop_head (network_autodetection->round_trip_times));
}
static int64_t
get_current_avg_round_trip_time_us (GrdRdpNetworkAutodetection *network_autodetection)
static void
update_round_trip_time_values (GrdRdpNetworkAutodetection *network_autodetection,
int64_t *base_round_trip_time_us,
int64_t *avg_round_trip_time_us)
{
int64_t sum_round_trip_times_us = 0;
uint32_t total_round_trip_times;
RTTInfo *rtt_info;
GQueue *tmp;
*base_round_trip_time_us = 0;
*avg_round_trip_time_us = 0;
remove_old_round_trip_times (network_autodetection);
if (!g_queue_get_length (network_autodetection->round_trip_times))
return 0;
if (g_queue_get_length (network_autodetection->round_trip_times) == 0)
return;
tmp = g_queue_copy (network_autodetection->round_trip_times);
total_round_trip_times = g_queue_get_length (tmp);
g_assert (total_round_trip_times > 0);
*base_round_trip_time_us = INT64_MAX;
while ((rtt_info = g_queue_pop_head (tmp)))
sum_round_trip_times_us += rtt_info->round_trip_time_us;
{
*base_round_trip_time_us = MIN (*base_round_trip_time_us,
rtt_info->round_trip_time_us);
sum_round_trip_times_us += rtt_info->round_trip_time_us;
}
g_queue_free (tmp);
return sum_round_trip_times_us / total_round_trip_times;
*avg_round_trip_time_us = sum_round_trip_times_us / total_round_trip_times;
}
static void
maybe_send_network_characteristics_results (GrdRdpNetworkAutodetection *network_autodetection,
uint32_t base_round_trip_time_ms,
uint32_t avg_round_trip_time_ms)
{
rdpContext *rdp_context = network_autodetection->rdp_context;
rdpAutoDetect *rdp_autodetect = network_autodetection->rdp_autodetect;
int64_t last_notification_us;
int64_t current_time_us;
uint16_t sequence_number;
if (network_autodetection->measured_bandwidth <= 0)
return;
if (g_queue_get_length (network_autodetection->round_trip_times) == 0)
return;
current_time_us = g_get_monotonic_time ();
last_notification_us = network_autodetection->last_nw_char_res_notification_us;
if (current_time_us - last_notification_us < MIN_NW_CHAR_RES_INTERVAL_US)
return;
rdp_autodetect->netCharBandwidth = network_autodetection->measured_bandwidth;
rdp_autodetect->netCharBaseRTT = base_round_trip_time_ms;
rdp_autodetect->netCharAverageRTT = avg_round_trip_time_ms;
g_mutex_lock (&network_autodetection->sequence_mutex);
sequence_number = get_next_free_sequence_number (network_autodetection);
g_mutex_unlock (&network_autodetection->sequence_mutex);
rdp_autodetect->NetworkCharacteristicsResult (rdp_context, sequence_number);
network_autodetection->last_nw_char_res_notification_us = current_time_us;
}
static BOOL
......@@ -310,8 +436,10 @@ autodetect_rtt_measure_response (rdpContext *rdp_context,
{
RdpPeerContext *rdp_peer_context = (RdpPeerContext *) rdp_context;
GrdRdpNetworkAutodetection *network_autodetection;
PingInfo *ping_info;
g_autofree PingInfo *ping_info = NULL;
int64_t pong_time_us;
int64_t ping_time_us;
int64_t base_round_trip_time_us;
int64_t avg_round_trip_time_us;
gboolean has_rtt_consumer_rdpgfx = FALSE;
......@@ -335,35 +463,71 @@ autodetect_rtt_measure_response (rdpContext *rdp_context,
g_clear_pointer (&ping_info, g_free);
}
if (ping_info)
{
int64_t ping_time_us = ping_info->ping_time_us;
g_assert (ping_info->sequence_number == sequence_number);
track_round_trip_time (network_autodetection, ping_time_us, pong_time_us);
avg_round_trip_time_us =
get_current_avg_round_trip_time_us (network_autodetection);
g_assert (ping_info);
g_assert (ping_info->sequence_number == sequence_number);
g_hash_table_remove (network_autodetection->sequences,
GUINT_TO_POINTER (ping_info->sequence_number));
}
g_hash_table_remove (network_autodetection->sequences,
GUINT_TO_POINTER (ping_info->sequence_number));
g_mutex_unlock (&network_autodetection->sequence_mutex);
ping_time_us = ping_info->ping_time_us;
track_round_trip_time (network_autodetection, ping_time_us, pong_time_us);
update_round_trip_time_values (network_autodetection,
&base_round_trip_time_us,
&avg_round_trip_time_us);
g_mutex_lock (&network_autodetection->consumer_mutex);
has_rtt_consumer_rdpgfx = has_rtt_consumer (
network_autodetection, GRD_RDP_NW_AUTODETECT_RTT_CONSUMER_RDPGFX);
g_mutex_unlock (&network_autodetection->consumer_mutex);
g_mutex_lock (&network_autodetection->shutdown_mutex);
if (ping_info && !network_autodetection->in_shutdown && has_rtt_consumer_rdpgfx)
if (!network_autodetection->in_shutdown && has_rtt_consumer_rdpgfx)
{
grd_rdp_graphics_pipeline_notify_new_round_trip_time (
rdp_peer_context->graphics_pipeline, avg_round_trip_time_us);
}
g_mutex_unlock (&network_autodetection->shutdown_mutex);
g_free (ping_info);
maybe_send_network_characteristics_results (network_autodetection,
base_round_trip_time_us / 1000,
avg_round_trip_time_us / 1000);
return TRUE;
}
static BOOL
autodetect_bw_measure_results (rdpContext *rdp_context,
uint16_t sequence_number)
{
RdpPeerContext *rdp_peer_context = (RdpPeerContext *) rdp_context;
GrdRdpNetworkAutodetection *network_autodetection =
rdp_peer_context->network_autodetection;
rdpAutoDetect *rdp_autodetect;
g_autoptr (GMutexLocker) locker = NULL;
int64_t base_round_trip_time_us;
int64_t avg_round_trip_time_us;
locker = g_mutex_locker_new (&network_autodetection->bw_measure_mutex);
if (network_autodetection->bw_measure_state != BW_MEASURE_STATE_PENDING_RESULTS)
return TRUE;
network_autodetection->bw_measure_state = BW_MEASURE_STATE_NONE;
g_clear_pointer (&locker, g_mutex_locker_free);
rdp_autodetect = network_autodetection->rdp_autodetect;
if (rdp_autodetect->netCharBandwidth <= 0)
return TRUE;
network_autodetection->measured_bandwidth = rdp_autodetect->netCharBandwidth;
update_round_trip_time_values (network_autodetection,
&base_round_trip_time_us,
&avg_round_trip_time_us);
maybe_send_network_characteristics_results (network_autodetection,
base_round_trip_time_us / 1000,
avg_round_trip_time_us / 1000);
return TRUE;
}
......@@ -381,6 +545,7 @@ grd_rdp_network_autodetection_new (rdpContext *rdp_context)
network_autodetection->rdp_autodetect = rdp_autodetect;
rdp_autodetect->RTTMeasureResponse = autodetect_rtt_measure_response;
rdp_autodetect->BandwidthMeasureResults = autodetect_bw_measure_results;
return network_autodetection;
}
......@@ -411,6 +576,8 @@ grd_rdp_network_autodetection_dispose (GObject *object)
g_clear_pointer (&network_autodetection->sequences, g_hash_table_destroy);
g_clear_pointer (&network_autodetection->bw_measure_stop_event, CloseHandle);
G_OBJECT_CLASS (grd_rdp_network_autodetection_parent_class)->dispose (object);
}
......@@ -420,6 +587,7 @@ grd_rdp_network_autodetection_finalize (GObject *object)
GrdRdpNetworkAutodetection *network_autodetection =
GRD_RDP_NETWORK_AUTODETECTION (object);
g_mutex_clear (&network_autodetection->bw_measure_mutex);
g_mutex_clear (&network_autodetection->sequence_mutex);
g_mutex_clear (&network_autodetection->consumer_mutex);
g_mutex_clear (&network_autodetection->shutdown_mutex);
......@@ -430,6 +598,12 @@ grd_rdp_network_autodetection_finalize (GObject *object)
static void
grd_rdp_network_autodetection_init (GrdRdpNetworkAutodetection *network_autodetection)
{
network_autodetection->ping_interval = PING_INTERVAL_NONE;
network_autodetection->bw_measure_state = BW_MEASURE_STATE_NONE;
network_autodetection->bw_measure_stop_event =
CreateEvent (NULL, TRUE, FALSE, NULL);
network_autodetection->sequences = g_hash_table_new (NULL, NULL);
network_autodetection->pings = g_queue_new ();
network_autodetection->round_trip_times = g_queue_new ();
......@@ -437,6 +611,7 @@ grd_rdp_network_autodetection_init (GrdRdpNetworkAutodetection *network_autodete
g_mutex_init (&network_autodetection->shutdown_mutex);
g_mutex_init (&network_autodetection->consumer_mutex);
g_mutex_init (&network_autodetection->sequence_mutex);
g_mutex_init (&network_autodetection->bw_measure_mutex);
}
static void
......
......@@ -53,4 +53,12 @@ void grd_rdp_network_autodetection_set_rtt_consumer_necessity (GrdRdpNetworkAuto
GrdRdpNwAutodetectRTTConsumer rtt_consumer,
GrdRdpNwAutodetectRTTNecessity rtt_necessity);
gboolean grd_rdp_network_autodetection_try_bw_measure_start (GrdRdpNetworkAutodetection *network_autodetection);
void grd_rdp_network_autodetection_bw_measure_stop (GrdRdpNetworkAutodetection *network_autodetection);
void grd_rdp_network_autodetection_queue_bw_measure_stop (GrdRdpNetworkAutodetection *network_autodetection);
HANDLE grd_rdp_network_autodetection_get_bw_measure_stop_event_handle (GrdRdpNetworkAutodetection *network_autodetection);
#endif /* GRD_RDP_NETWORK_AUTODETECTION_H */
......@@ -2011,9 +2011,20 @@ socket_thread_func (gpointer data)
while (TRUE)
{
GrdRdpNetworkAutodetection *network_autodetection =
rdp_peer_context->network_autodetection;
gboolean pending_bw_measure_stop = FALSE;
HANDLE bw_measure_stop_event = NULL;
n_events = 0;
events[n_events++] = session_rdp->stop_event;
if (network_autodetection)
{
bw_measure_stop_event =
grd_rdp_network_autodetection_get_bw_measure_stop_event_handle (network_autodetection);
events[n_events++] = bw_measure_stop_event;
}
n_freerdp_handles = peer->GetEventHandles (peer, &events[n_events],
32 - n_events);
......@@ -2068,6 +2079,12 @@ socket_thread_func (gpointer data)
break;
}
if (bw_measure_stop_event)
{
pending_bw_measure_stop = WaitForSingleObject (bw_measure_stop_event,
0) == WAIT_OBJECT_0;
}
if (WaitForSingleObject (channel_event, 0) == WAIT_OBJECT_0 &&
!WTSVirtualChannelManagerCheckFileDescriptor (vcm))
{
......@@ -2075,6 +2092,9 @@ socket_thread_func (gpointer data)
handle_client_gone (session_rdp);
break;
}
if (pending_bw_measure_stop)
grd_rdp_network_autodetection_bw_measure_stop (network_autodetection);
}
if (session_rdp->hwaccel_nvidia)
......
......@@ -21,7 +21,6 @@ vnc_client_failed = None
vnc_server_failed = None
os.environ['GNOME_REMOTE_DESKTOP_TEST_VNC_PASSWORD'] = 'secret'
os.environ['MUTTER_DEBUG_DUMMY_MODE_SPECS'] = '1024x768'
def run_vnc_test_client():
print("Running VNC test client")
......@@ -70,7 +69,8 @@ def remote_desktop_name_appeared_cb(name):
def start_mutter():
global mutter
print("Starting mutter")
mutter = subprocess.Popen(['mutter', '--nested', '--wayland'],
mutter = subprocess.Popen(['mutter', '--headless', '--wayland', '--no-x11',
'--virtual-monitor', '1024x768'],
stderr=subprocess.STDOUT)
def stop_mutter():
......
#!/usr/bin/env bash
dbus-run-session -- xvfb-run -s '+iglx -noreset' $TEST_SRCDIR/tests/run-vnc-tests.py
dbus-run-session -- $TEST_SRCDIR/tests/run-vnc-tests.py