User avatar
SyncBerry
Posts: 51
Joined: Sat Sep 21, 2019 11:13 am
Location: France (S-W)

Comment démarrer vncserver via ssh seulement

Wed Nov 27, 2019 10:25 pm

Bonsoir
C'est un Pi4B headless avec raspbian buster OS: Raspbian GNU/Linux 10, Linux 4.19.75, armv7l
Je voudrais pouvoir démarrer automatiquement le vncserver (vncserver-virtual) du RPI à partir d'une connexion SSH depuis un ubuntu (avec remmina) et depuis un windows+PuTTY et uniquement comme ça (port forward ssh=connexion vnc via tunnel ssh sur interface lo)
J'ai bien le RPI configuré comme il faut (je crois) par raspi-config : mode Text console, requiring user to login et vncserver désactivé.
J'ai trouvé qu'on peut mettre la commande dans le ~/.bashrc du RPI, ça marche, mais si j'ouvre un terminal depuis le Bureau du RPI ça lance une autre instance du vncserver.
J'ai trouvé sur le net qu'on peut faire dépendre le comportement en testant la variable SSH_CONNECTION mais ça ne marche pas bien dans mon cas :

Code: Select all

if [[ -n $SSH_CONNECTION ]] ; then
    vncserver
fi
Ensuite j'ai buché (un peu) toutes les variables de SSH mais rien trouvé qui m'inspire, et plus hard encore, toutes les variables de bash (là ça m'a confirmé que je suis quasi nul)... mais y'en a quand-même une, $0, qui est différente dans trois cas (oui il y a trois cas, parce que comme je galérais trop je suis allé acheter un adaptateur µHDMI>VGA chez le marchand... :oops:)

Connexion SSH présente
[1] Login sur la console (je veux pas le serveur, cool, il ne se lance pas)
$SSH_CONNECTION => rien
$0 => -bash
[2] Login SSH (je veux le serveur, ça marche)
$SSH_CONNECTION => ip-client 51714 ip-raspberry 22
$0 => -bash
[3] Terminal lancé depuis le bureau vnc
$SSH_CONNECTION => ip-client 51714 ip-raspberry 22 (damned :twisted: ça lance quand-même un autre vncserver)
$0 => bash

J'en déduis qu'il faudrait que je teste les 2 variables. Avec un peu de chance y'aurait peut-être aussi moyen d'arrêter le serveur via .bash_logout :) en quittant (ssh seulement).
Mais je me demande si c'est vraiment la bonne façon de faire ?

Autre suggestion ?

Merci d'avance

jelopo
Posts: 1515
Joined: Wed Oct 17, 2012 7:53 pm

Re: Comment démarrer vncserver via ssh seulement

Thu Nov 28, 2019 9:04 pm

Bonjour,

Ajouter une condition au if, si une instance de vncserver existe déjà alors, il n'en lance pas une seconde.

Code: Select all

if [[ -n $SSH_CONNECTION ]] && pgrep -c vncserver >/dev/null 2>&1
then   vncserver
fi
N.B.: Tester la commande pgrep à la main avant de l'insérer

A+

User avatar
SyncBerry
Posts: 51
Joined: Sat Sep 21, 2019 11:13 am
Location: France (S-W)

Re: Comment démarrer vncserver via ssh seulement

Thu Nov 28, 2019 10:40 pm

Cool l'idée, merci. Je vais voir comment l'adapter à ceci que j'ai testé OK:

Code: Select all

if [[ -n $SSH_CONNECTION ]] ; then
	if [[ $0 = "-bash" ]]; then
vncserver
fi
fi

iznobe
Posts: 287
Joined: Sun Feb 05, 2017 4:14 pm
Location: Avignon , FRANCE

Re: Comment démarrer vncserver via ssh seulement

Fri Nov 29, 2019 2:46 pm

Salut ,

Pour faire cela rien de plus simple :

connecter vous en ssh sur le pi puis taper la commande :

Code: Select all

vncserver
ou

Code: Select all

realvncserver
selon le logiciel que vous avez installé sur votre pi .

Ensuite il suffit de lancer le client vnc , et de mettre l ' adresse qu ' il vous a donné en reponse a la commande , en general , vncserver::1 et le mot de passe , je fais tout le temps comme ca , je n' ai jamais vu deux instances dans top et ca a toujours bien marche .

User avatar
SyncBerry
Posts: 51
Joined: Sat Sep 21, 2019 11:13 am
Location: France (S-W)

Re: Comment démarrer vncserver via ssh seulement

Sat Nov 30, 2019 12:31 pm

Bonjour iznobe
C'est bien le serveur de RealVNC que j'utilise. Sur ma raspbian10 il n'y a pas de commande realvncserver.
La commande que j'utilise, vncserver, est un link vers vncserver-virtual.
Dans top effectivement je vois plusieurs instances de vncserver, comme aussi dans ps ax|grep vnc on voit bien les multiples instances :

Code: Select all

~ $ ps ax|grep vnc
 1280 ?        Ss     0:00 vncserver
 1282 ?        S      0:24 /usr/bin/Xvnc-core :1 -auth /home/myuser/.Xauthority -pn AdminPassword=blahblah
 1283 ?        S      0:00 /usr/bin/Xvnc -rootHelper 1000 4
 1298 ?        S      0:00 /usr/bin/dbus-daemon --session --nofork --address=unix:path=/tmp/.vnc-1000/run/session-xxxxxxxxxxxxxxxx/bus --nopidfile --nosyslog
 1300 ?        S      0:00 /bin/sh /etc/vnc/xstartup
 1356 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-fuse /tmp/.vnc-1000/run/gvfs -f -o big_writes
 1395 ?        S      0:00 /usr/bin/vncserverui virtual 20
 1416 ?        S      0:00 /usr/bin/vncserverui -statusicon 5
 1422 ?        Sl     0:00 /usr/lib/menu-cache/menu-cached /tmp/.vnc-1000/run/menu-cached-:1
 8459 ?        Ss     0:00 vncserver
 8461 ?        S      0:03 /usr/bin/Xvnc-core :2 -auth /home/myuser/.Xauthority -pn AdminPassword=blahblah
 8462 ?        S      0:00 /usr/bin/Xvnc -rootHelper 1000 4
 8477 ?        S      0:00 /usr/bin/dbus-daemon --session --nofork --address=unix:path=/tmp/.vnc-1000/run/session-yyyyyyyyyyyyyyyy/bus --nopidfile --nosyslog
 8479 ?        S      0:00 /bin/sh /etc/vnc/xstartup
 8573 ?        S      0:00 /usr/bin/vncserverui virtual 19
 8591 ?        S      0:00 /usr/bin/vncserverui -statusicon 5
 8597 ?        Sl     0:00 /usr/lib/menu-cache/menu-cached /tmp/.vnc-1000/run/menu-cached-:2
14747 ?        Ss     0:00 vncserver
14749 ?        S      0:00 /usr/bin/Xvnc-core :3 -auth /home/myuser/.Xauthority -pn
14750 ?        S      0:00 /usr/bin/Xvnc -rootHelper 1000 4
14765 ?        S      0:00 /usr/bin/dbus-daemon --session --nofork --address=unix:path=/tmp/.vnc-1000/run/session-zzzzzzzzzzzzzzzz/bus --nopidfile --nosyslog
14767 ?        S      0:00 /bin/sh /etc/vnc/xstartup
14863 ?        S      0:00 /usr/bin/vncserverui virtual 19
14878 ?        S      0:00 /usr/bin/vncserverui -statusicon 5
14884 ?        Sl     0:00 /usr/lib/menu-cache/menu-cached /tmp/.vnc-1000/run/menu-cached-:3
14979 pts/0    S+     0:00 grep --color=auto vnc
D'ailleurs, ça se voit à l'ouverture du terminal, puisqu'il qu'il y a tout le baratin de RealVNC qui s'affiche. Au moins j'ai réussi à diminuer le nombre d'instances grâce aux filtres $0 et -bash dans .bashrc.
Je n'ai pas encore appliqué d'idée de jelopo pour n'autoriser qu'un seul vncserver par utilisateur, mais c'est prometteur.

En plus, de vous avoir répondu avec un post du code ps et l'effacement des données privées, ça m'a donné une piste pour un autre problème

User avatar
SyncBerry
Posts: 51
Joined: Sat Sep 21, 2019 11:13 am
Location: France (S-W)

Re: Comment démarrer vncserver via ssh seulement

Sun Dec 01, 2019 11:38 pm

Et voilà, ça marche :P
Mais comme le code de retour de pgrep est "inversé"* par rapport à la sortie, j'ai dû inverser la logique :

Code: Select all

if [[ -n $SSH_CONNECTION ]] ; then
 if [[ $0 = "-bash" ]]; then
  if pgrep -c vncserver >/dev/null 2>&1; then :
   else vncserver
  fi
 fi
fi
*
rien trouvé=0 => $?=1
trouvé >0 => $?=0
Syntax error => $?=2
Fatal error: out of memory etc. => $?=3

Bonus : maintenant, mon ~/.bash_logout marche à tous les coups :-)

Code: Select all

...
if [[ -n $SSH_CONNECTION ]] ; then
 if [[ $0 = "-bash" ]]; then
 # ici, pas besoin d'inverser la logique :-)
  if pgrep -c vncserver >/dev/null 2>&1
  then vncserver -kill :1
  fi
 fi
fi

Merci jelopo

Return to “Français”