Désactiver la console locale lors de l'utilisation de x11vnc

Salut tout le monde

Sur Internet, il existe de nombreux articles sur la façon de configurer une connexion à distance à une session Xorg existante via x11vnc, mais je n'ai trouvé nulle part comment épingler le moniteur local et entrer de sorte que toute personne assise à côté de l'ordinateur distant ne voit pas ce que vous faites et non boutons enfoncés dans votre session. Sous cat, ma façon de rendre x11vnc ressemble plus à la connexion à Windows via RDP.

Donc, disons que vous savez déjà comment utiliser x11vnc, sinon, vous pouvez google ou lire par exemple ici .

Étant donné: lancez x11nvc, connectez-vous avec le client, tout fonctionne, mais la console informatique locale est également disponible pour la visualisation et la saisie.

Nous voulons: couper la console locale (moniteur + clavier + souris) pour que rien ne puisse être vu et saisi.

Nous avons réduit les moniteurs


La première chose qui m'est venue à l'esprit était de couper le moniteur via xrandr, par exemple comme ceci:

$ xrandr --output CRT1 --off 

mais en même temps, l'environnement des fenêtres (j'ai KDE) commence à penser que le moniteur est vraiment éteint et commence à lancer des fenêtres et des panneaux, tout se déplace et devient triste.
Il existe un moyen plus intéressant, qui consiste à mettre le moniteur en veille, vous pouvez le faire par exemple comme ceci:

 $ xset dpms force off 

mais ici aussi, tout ne se passe pas bien. Le système réveille le moniteur lors du premier événement. La béquille la plus simple sous forme de cycle permet:

 while : do xset dpms force off sleep .5 done 

Je ne pensais pas plus loin - c'était de la paresse, ça remplit son rôle - les moniteurs ne montrent rien, même si vous appuyez sur des boutons, remuez la souris, etc.

UPD:

Merci amarao pour une autre façon de passer à une luminosité nulle:
 $ xrandr --output CRT1 --brightness 0 


Coupez l'entrée


Pour désactiver l'entrée, j'ai utilisé xinput. Lorsqu'il est lancé sans paramètres, il affiche une liste d'appareils:

 $ xinput ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Logitech USB Laser Mouse id=9 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Power Button id=7 [slave keyboard (3)] ↳ Sleep Button id=8 [slave keyboard (3)] ↳ USB 2.0 Camera: HD 720P Webcam id=10 [slave keyboard (3)] ↳ HID 041e:30d3 id=11 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)] 

Les périphériques virtuels de base ... ne peuvent pas être désactivés - une erreur est générée, mais le reste peut être activé et désactivé, par exemple, comme ceci, vous pouvez rester sans souris pendant une minute:

 xinput disable 9; sleep 60; xinput enable 9 

Solution clé en main


Pour mon cas, j'ai fait un script qui s'exécute en session ssh. Il supprime l'entrée locale et soulève le serveur x11vnc, et une fois le script terminé, tout revient comme il était. En conséquence, trois scripts se sont révélés, les voici (mis à jour).

switch_local_console:

 #!/bin/sh case $1 in 1|on) desired=1 ;; 0|off) desired=0 ;; *) echo "USAGE: $0 0|1|on|off" exit 1 ;; esac keyboards=`xinput | grep -v "XTEST" | grep "slave keyboard" | sed -re 's/^.*\sid=([0-9]+)\s.*$/\1/'` mouses=`xinput | grep -v "XTEST" | grep "slave pointer" | sed -re 's/^.*\sid=([0-9]+)\s.*$/\1/'` monitors=`xrandr | grep " connected" | sed -re 's/^(.+) connected.*$/\1/'` for device in $mouses do xinput --set-prop $device "Device Enabled" $desired done for device in $keyboards do xinput --set-prop $device "Device Enabled" $desired done for device in $monitors do xrandr --output $device --brightness $desired done 


disable_local_console:
 #!/bin/sh trap "switch_local_console 1" EXIT while : do switch_local_console 0 sleep 1 done 

En fait, le script principal (j'ai deux moniteurs, je soulève un serveur commun et un pour chaque moniteur).

vnc_server:

 #!/bin/bash [[ ":0" == "$DISPLAY" ]] && echo "Should be run under ssh session" && exit 1 export DISPLAY=:0 killall x11vnc rm -r /tmp/x11vnc mkdir -p /tmp/x11vnc/{5900,5901,5902} params="-fixscreen V=5 -forever -usepw -noxkb -noxdamage -repeat -nevershared" echo "Starting VNC servers" x11vnc -rfbport 5900 $params 2>&1 | tinylog -k 2 -r /tmp/x11vnc/5900 & x11vnc -rfbport 5901 $params -clip 1920x1080+0+0 2>&1 | tinylog -k 2 -r /tmp/x11vnc/5901 & x11vnc -rfbport 5902 $params -clip 1920x1080+1920+0 2>&1 | tinylog -k 2 -r /tmp/x11vnc/5902 & echo "Waiting VNC servers" while [ `ps afx | grep -c "x11vnc -rfbport"` -ne "4" ] do sleep .5 done echo "Disabling local console" disable_local_console echo "Killing VNC servers" killall x11vnc 

En fait, tout. Nous allons par ssh, exécutons vnc_server alors qu'il est vivant, avons accès via vnc et la console locale éteinte.

Merci de votre attention, les ajouts et améliorations sont les bienvenus.

Source: https://habr.com/ru/post/fr469885/


All Articles