web-dev-qa-db-fra.com

Ubuntu 18.04 LTS x11vnc ne fonctionne plus

J'ai récemment changé d'Ubuntu 16.04 LTS à 18.04 LTS, car j'avais besoin d'une version plus récente de kvm/qemu.

Avec 16.04, le service (démon) x11vnc fonctionnait facilement en suivant les instructions du "Wiki d'aide de la communauté": https://help.ubuntu.com/community/VNC/Servers

Un script est nécessaire pour configurer le service démon x11vnc, qui vous permet de vous connecter à une machine à distance sans avoir à vous connecter au préalable. J'ai besoin de cela car ma machine fonctionne en tant que serveur et est située au sous-sol et j'y accède toujours via VNC, pas localement.

Initialement, je n'ai rien fait avec mon installation propre 18.04 si ce n'est d'ajouter le script systemctl exactement comme indiqué dans les instructions "Wiki d'Aide de la Communauté": "x11vnc démarre automatiquement via systemd dans n'importe quel environnement (Vivid +)".

Constatant que cela ne fonctionnait plus, j’ai ensuite procédé comme suit:

  1. Gestionnaire d'affichage "Wayland" désactivé en modifiant /etc/gdm3/custom.conf et en définissant WaylandEnable=false dans ce script:

    [daemon]
    # Uncoment the line below to force the login screen to use Xorg
    #WaylandEnable=false
    WaylandEnable=false  <--- HERE
    
  2. La commande /lib/systemd/system/x11vnc.service ExecStart a été modifiée pour utiliser une directive xauth différente (il est apparu dans 18.04 qu'il n'existe aucun fichier $HOME/.Xauthority généré automatiquement qui puisse être trouvé via la directive -xauth guest:

    De:

    ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/USERNAME/.vnc/passwd -rfbport 5900 -shared
    

    À:

     ExecStart=/usr/bin/x11vnc -auth /run/user/120/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /home/USERNAME/.vnc/passwd -rfbport 5920 -shared
    

Je l'ai fait sur la base de tests et de lectures sur Xauthority, qui indiquaient que l'emplacement du jeton .Xauthority est maintenant indiqué via la variable d'environnement $XAUTHORITY.

Pour rechercher la valeur de cela, exécutez la commande "find" suivante afin de déterminer les processus pour lesquels une variable d'environnement XAUTHORITY est définie.

NOTE: ceci utilise la structure de fichier linux /proc/<procid>/environ pour rechercher dans les variables d’environnement de processus,

cd /proc
Sudo find . -maxdepth 1 -type d -exec sh -c "(test -f '{}'/environ && cat '{}'/environ | tr '\0' '\n' | grep XAUTHORITY= )" \;

Cela a donné deux résultats différents:

  • XAUTHORITY=/run/user/120/gdm/Xauthority
  • XAUTHORITY=/run/user/1000/gdm/Xauthority

J'ai ensuite utilisé ce qui suit pour trouver les identifiants de processus correspondants:

Sudo find . -maxdepth 1 -type d -exec sh -c "(test -f '{}'/environ && grep -aH XAUTHORITY= '{}'/environ )" \;

Les processus correspondants pour ceux-ci sont:

240 tty1     Sl+    0:00 /usr/lib/gnome-session/gnome-session-binary --autostart /usr/share/gdm/greeter/autostart
14923 tty2     Sl+    0:00 /usr/lib/gnome-session/gnome-session-binary --session=ubuntu

Le premier de ces éléments semble être associé à l'écran de connexion de la machine, tandis que le second est le bureau de l'utilisateur.

Une vérification supplémentaire des variables d'environnement montre que l'une a USER=gdm et l'autre USER=<ME>

Le problème est que si j'utilise l'emplacement d'authentification "greeter", je suis invité à fournir un mot de passe qui est ensuite suivi d'un écran noir/blanc. Si j'utilise l'emplacement d'authentification de l'utilisateur, je ne reçois aucune connexion client car l'état renvoie un message d'erreur indiquant qu'il est impossible d'ouvrir l'affichage.

13/05/2018 16:19:14 *** XOpenDisplay failed.

Il semble donc que vous êtes pris par le changement de mécanisme de xauth.

Quelqu'un peut-il s'il vous plaît donner des conseils à ce sujet?

4
zebity

J'ai eu le même problème et après quelques discussions avec x11vnc et gdm, j'ai décidé de revenir simplement à lightdm:

apt install lightdm

Cela devrait faire apparaître la configuration du gestionnaire d'affichage. Si non couru:

dpkg-reconfigure lightdm

Je lance maintenant mon serveur x11vnc via superviseur avec la configuration suivante:

$ cat /etc/supervisor/conf.d/x11vnc.conf
[program:x11vnc]
command=/usr/bin/x11vnc -xkb -safer -nopw -once -geometry 1024x768 -auth /var/run/lightdm/root/\:0 -display :0
user=root
autorestart=true

De plus, je lance noVNC (également via superviseur) pour pouvoir accéder à mon bureau à distance via un navigateur. Juste au cas où vous seriez intéressé, les fichiers de configuration ressemblent à ceci:

$ cat /etc/supervisor/conf.d/novnc.conf
[program:noVNC]
command=/opt/noVNC/utils/launch.sh --vnc localhost:5900
user=root

$ cat /etc/nginx/sites-enabled/novnc
upstream vnc_proxy {
    server 127.0.0.1:6080;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    include snippets/snakeoil.conf;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
            auth_pam               "Secure Zone";
            auth_pam_service_name  "nginx";
            proxy_pass http://vnc_proxy/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            keepalive_requests 10000;

            proxy_read_timeout 61s;

            proxy_buffering off;
    }
}

Vous voudrez peut-être envelopper une sécurité supplémentaire autour de cela.

4
Uli

Ubuntu 18.04 x11vnc utilisateurs.

Voici une "réponse rapide" qui vous permet d’obtenir un accès VNC sans être connecté.

Je dis bidouille car cela implique d'avoir 2 services x11vnc en cours d'exécution.

La première consiste à autoriser la connexion via DISPLAY=:0 et la seconde consiste à utiliser VNC pour accéder au bureau via DISPLAY=:1

Pour ce faire, j'ai utilisé les 2 scripts de démon suivants:

Le premier est: x11vnc-login.service juste pour le message d'accueil de connexion

[Unit]
Description=Start x11vnc-login at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth /run/user/120/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /home/<ID>/.vnc/password -rfbport 5922 -shared -display :0
[Install]
WantedBy=multi-user.target

La seconde est: x11vnc.service for desktop:

[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth /run/user/1000/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /home/<ID>/.vnc/password -rfbport 5920 -shared -display :0
[Install]
WantedBy=multi-user.target

L'installation et l'activation des scripts sont conformes à documentation sur le site d'aide de la communauté .

Ceci est un bidule horrible mais me fait courir pour le moment jusqu'à ce qu'une solution appropriée soit trouvée.

En cours d’utilisation, j’ouvre d’abord la session VNC sur le port 5922 et me connecte. Une fois connecté, vous obtenez un écran noir. Vous ouvrez alors une session VNC sur le port 5920 et le tour est joué, il y a votre bureau. Encore plus facile pour moi que de devoir aller là où la machine serveur est en cours d'exécution ...

De toute évidence, il faut un script qui effectue une recherche préliminaire des processus en cours pour voir si un utilisateur est connecté et, le cas échéant, utilisez simplement les informations XAUTHORITY/DISPLAY de la section utilisateur existante (extraites de/proc/PROCID/environ , sinon, connectez la prise vers l’écran de la machine avec la bannière XAUTHORITY/DISPLAY, puis déplacez la connexion de la prise vers une autre session x11vnc à l’aide des valeurs XAUTHOURITY/DISPLAY du poste de travail de l’utilisateur.

Je soupçonne un peu de programmation complexe de descripteur fork/socket/fichier.

Une autre possibilité consiste à déterminer s’il est possible de faire en sorte que le gestionnaire d’affichage 18.04 se comporte comme auparavant.

2
zebity

Le moyen le plus simple de rétablir le fonctionnement consiste à revenir de GDM3 à LightDM.

Ce qui, en passant, n’est absolument aucun déclassement/recul.

buntu 18.04 se connecter à l'écran de connexion via VNC

0
Seb