Comment accéder à une machine Ubuntu via VNC à partir de l'écran de connexion?

17

Je souhaite accéder à distance à une machine Ubuntu via VNC. Mais je ne peux accéder à la machine Ubuntu que si l'utilisateur est connecté. Je veux accéder à la machine Ubuntu via VNC à partir de l'écran de connexion lui-même. Nous pouvons accéder à toutes les machines Windows à partir de l'écran de connexion. Cependant, nous n'avons pas pu accéder à la machine Ubuntu à partir de l'écran de connexion. Il y a un moyen mais je ne connais pas les détails. Quelqu'un peut-il donner une solution à ce problème?

karthick87
la source
Si l'autre machine est sur le même LAN, il serait possible d'utiliser simplement XDMCP au lieu de VNC. Si ce n'est pas sur le même réseau local, X non accéléré sur le réseau peut être trop lent.
Robin Green

Réponses:

10

Le mieux est d'installer xrdp Installer xrdp . Après l'installation, vous pouvez utiliser un client RDP pour vous connecter à la machine - vous serez ensuite invité à entrer vos informations d'identification comme vous le feriez sur l'écran de connexion.

Nathan Osman
la source
J'ai installé xrdp mais je ne parviens toujours pas à accéder à la machine Ubuntu depuis l'écran de connexion.
karthick87
@karthick: vous connectez-vous à la machine avec VNC ou utilisez-vous un client RDP?
Nathan Osman
Je ne trouve pas de client RDP sur ma machine. Où sera-t-il situé?
karthick87
@karthick: Utilisez-vous Ubuntu comme client? Si tel est le cas, le programme à utiliser est appelé "Client Terminal Server". Sous Windows, il s'appelle "Remote Desktop" IIRC.
Nathan Osman
Ouais merci. Est-il possible de créer un lanceur pour le client Terminal Server?
karthick87
5

Dans l'ensemble, je recommanderaisx11vnc .

TL; DR

apt-get -y install x11vnc
x11vnc -storepasswd

Entrez votre mot de passe, il est enregistré par défaut sous ~/.vnc/passwd forme cryptée INSECURE. Il peut être décrypté car la clé est connue. .. protégez-le avec les autorisations du système de fichiers)

chmod 600 ~/.vnc/passwd

Enregistrer mon script d'aide localement:

mkdir ~/bin/
curl https://gist.githubusercontent.com/trinitronx/76d2bf98489e5e3e84fa/raw/53885d87f91320b574ca4f7d609e4bb268274f68/start_x11vnc.sh  > ~/bin/start_x11vnc.sh && chmod +x ~/bin/start_x11vnc.sh

Depuis votre hôte client VNC:

ssh -f  -L 5900:127.0.0.1:5900 -p 22 [email protected] '~/bin/start_x11vnc.sh && sleep 10'

Ou, à partir de votre hôte VNC Server, exécutez:

~/bin/start_x11vnc.sh

via un terminal (ou commencer comme un démon avec -forevercomme service init.d , le service arriviste , unité systemd , ou comme vous le souhaitez)

Maintenant, exécutez votre client VNC de votre choix à partir de votre hôte client, pointez-le sur 127.0.0.1:5900:, connectez-vous avec le mot de passe enregistré ci-dessus.

Utilisez le "Cookie magique" X11

La plupart des gestionnaires d'affichage X (comme GDM , XDM , KDM ) démarrent un serveur X11 initial et s'authentifient auprès de lui avec un cookie magique MIT . Selon votre gestionnaire d'affichage, le cookie magique se trouvera dans l'un des différents emplacements .

J'ai eu de la chance d'ouvrir une session VNC sur l'écran de connexion d'Ubuntu GDM * NOTE1 en trouvant le cookie magique avec ce script :

#!/bin/bash
DEFAULT_DISPLAY=:0
X11VNC_DISPLAY="$DEFAULT_DISPLAY"

if [ -x /usr/bin/x11vnc ]; then
     [ "$1" == '-nocache' ] && CACHE_FLAG='-noncache' || CACHE_FLAG='-noncache'
     [ "$2" == '-guess' ] && GUESS_FLAG='-auth guess' || GUESS_FLAG=''
         [ -f /root/.vnc/passwd ] && PASSWORD="/root/.vnc/passwd"
         [ -f $HOME/.vnc/passwd ] && PASSWORD="$HOME/.vnc/passwd"
         [ ! -z "$PASSWORD" ] && x11vnc -display $X11VNC_DISPLAY -xkb -rfbauth $PASSWORD -rfbport 5900 -shared -forever -nowf -norc -notruecolor -bg $GUESS_FLAG $CACHE_FLAG -noxdamage
    EXIT_CODE=$?
     if [ $EXIT_CODE -ne 0 ]; then

        echo "\n*********************************************************************"
        echo "*** Could not start x11vnc!  Trying again with gdm MAGIC_COOKIE! ***"
        echo "*********************************************************************\n"

        # Old GDM location for Ubuntu <= 17.10
        MAGIC_COOKIE_FILE=`sudo find /var/run/gdm/ -iname database | grep for-gdm`

        # New GDM location for Ubuntu >= 17.10
        [ -z "$MAGIC_COOKIE_FILE" ] && NUM_MAGIC_COOKIE_FILE_SESSIONS=`sudo find /run/user/ -iwholename '*/gdm/*' -iname '*Xauthority' 2>/dev/null | wc -l`
        if [ -z "$MAGIC_COOKIE_FILE" -a "$NUM_MAGIC_COOKIE_FILE_SESSIONS" -gt 1 ]; then
            # Find the current user's session
            MAGIC_COOKIE_FILE=`sudo find /run/user/$(id -u) -iwholename '*/gdm/*' -iname '*Xauthority'`
            X11VNC_DISPLAY=":1"
        else
            # Find the GDM user's session (or whichever shows up first in ps list)
            # This should pick up the original gdm session which grabs :0
            # If you login after gdm login screen, your Xorg server may end up on another display!
            # Workaround for now is to restart x11vnc on that display number
            [ -z "$MAGIC_COOKIE_FILE" ] && MAGIC_COOKIE_FILE=`sudo find /run/user/ -iwholename '*/gdm/*' -iname '*Xauthority' | head -n1`
        fi
        # Old lightdm location for Ubuntu <= 17.10
        [ -z "$MAGIC_COOKIE_FILE" ] && MAGIC_COOKIE_FILE=`sudo find /var/lib -name '.Xauthority' -o -wholename '/var/run/lightdm/root/:0' | head -n1`
        #sudo bash -c "[ -z \"$MAGIC_COOKIE_FILE\" -a -e /var/run/lightdm/root/:0 ]" && MAGIC_COOKIE_FILE='/var/run/lightdm/root/:0'
        [ -n "$MAGIC_COOKIE_FILE" -a -z "$GUESS_FLAG" ] && AUTH_COOKIE_FLAG="-auth $MAGIC_COOKIE_FILE"
        [ ! -z "$PASSWORD" ] && sudo x11vnc -display $X11VNC_DISPLAY -xkb -rfbauth $PASSWORD -rfbport 5900 -shared -forever -nowf -norc -notruecolor -bg $GUESS_FLAG $CACHE_FLAG -noxdamage ${AUTH_COOKIE_FLAG}
    fi
fi

Je peux démarrer ce script (je l'ai appelé start_x11vnc.sh) à tout moment via SSH ... avant même de me connecter via l' gdmécran de connexion. Il lance un x11vncserveur auquel je peux ensuite me connecter via le tunnel SSH . (Utilisez ssh -L 5900:127.0.0.1:5900ou ajoutez LocalForward 5900 127.0.0.1:5900à l'entrée de votre hôte dans ~/.ssh/config).

REMARQUE 1 : dans certaines nouvelles versions de distribution telles que Ubuntu> = 17.10, l'affichage de session X de connexion GDM est complètement distinct de l'affichage de session X de l'utilisateur connecté. Par conséquent, il est nécessaire de se connecter d'abord à la session X GDM, de se connecter ... et enfin de se déconnecter et de se reconnecter à la session X nouvellement démarrée. Pourquoi ils le font maintenant de cette façon est un mystère, mais cela a brisé l'ancienne version de ce script.

TrinitronX
la source
Ne marche pas. Le client VNC se connecte puis se ferme immédiatement
Dims
@Dims Utilisez la commande:vncviewer <remote_ip>
Gokul NC
le script a été cassé pour les nouvelles versions d'Ubuntu ... Je l'ai mis à jour avec un hack pour lui permettre de fonctionner à nouveau. Il semble que la session d'affichage gdm soit désormais distincte de la session connectée, donc si vous utilisez ce script sur Ubuntu, il vous amènera d'abord à l'écran de connexion GDM, puis lorsque vous vous connecterez, cet affichage de session X deviendra vide. Vous devez maintenant arrêter le premier processus x11vnc et réexécuter le script pour le rattacher à la session X distincte et à l'affichage.
TrinitronX
2

Pour activer la connexion GDM sur une connexion à distance VNC ssh, essayez avec X11vnc. Voir aussi cette réponse .

Takkat
la source
0

Voici comment le faire avec VNC, si vous ne souhaitez pas utiliser RDP:

  1. Installer le serveur X11VNC: sudo apt-get install x11vnc(Ou via Ubuntu Software Center -> X11VNC Server)
  2. Définissez un mot de passe:

    sudo mkdir /etc/x11vnc
    sudo x11vnc -storepasswd /etc/x11vnc/passwd
    

    Choisissez yd'enregistrer le mot de passe.

  3. Créez un fichier vide /etc/initappelé x11vnc.conf:

    sudo -H gedit /etc/init/x11vnc.conf
    
  4. Collez-le dans le fichier:

    start on login-session-start
    
    exec x11vnc -xkb -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbauth /etc/x11vnc/passwd -rfbport 5900 -bg -o /var/log/x11vnc.log
    
  5. Sauver et fermer

  6. Redémarrez Ubuntu

C'est ça! Vous devriez maintenant pouvoir vous connecter avec n'importe quel client VNC avant même de vous connecter.

Didier A.
la source
Ça n'a pas marché.
masse
@mace Intéressant, cela avait fonctionné pour moi, peut-être dépendait-il de la version Ubuntu. Malheureusement, je ne me souviens pas de la version de mon Ubuntu lorsque j'avais effectué cette procédure.
Didier A.
0

re: essayez avec X11vnc

x11vnc n'a pas été mis à jour depuis septembre 2011 !!!! Il y a des bogues connus et j'en fais apparaître un qui déclenche une fin de smash de pile de x11vnc à chaque fois qu'une boîte de dialogue contextuelle (telle que cliquer sur le menu 'fichier' sur n'importe quelle fenêtre) déconnecte la session.

Les Raspberry Pi peuvent se connecter à la session du gestionnaire de bureau sur: 0, pourquoi diable est-ce un tel problème pour Ubuntu?!?! Pourquoi est-il nécessaire de s'appuyer sur un programme orphelin de 7 ans pour le faire sur n'importe quel système d'exploitation moderne?

Scott
la source