Bonjour à tous,
Il existe de nombreux articles sur Internet sur la façon de configurer une connexion à distance à une session Xorg existante via x11vnc, mais je n'ai trouvé nulle part comment supprimer le moniteur et l'entrée locaux afin que toute personne assise à côté de l'ordinateur distant le fasse. ne voit pas ce que vous faites et n'appuie pas sur les boutons de votre session. Sous la coupe se trouve ma méthode pour rendre x11vnc plus similaire à la connexion à Windows via RDP.
Donc, disons que vous savez déjà utiliser x11vnc, sinon vous pouvez googler ou lire par exemple
donné: nous lançons x11nvc, nous nous y connectons avec le client, tout fonctionne, mais la console locale de l'ordinateur est également disponible pour la visualisation et la saisie.
Nous voulons: éteignez la console locale (moniteur + clavier + souris) pour que rien ne puisse être vu ou saisi.
Éteindre les moniteurs
La première chose qui m'est venue à l'esprit a été simplement d'éteindre le moniteur via xrandr, par exemple comme ceci :
$ xrandr --output CRT1 --off
mais en même temps, l'environnement de fenêtrage (j'ai KDE) commence à penser que le moniteur est vraiment éteint et commence à ouvrir des fenêtres et des panneaux, tout bouge et devient triste.
Il existe une manière plus intéressante, qui consiste à envoyer le moniteur en hibernation, 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 au premier événement. La béquille la plus simple en forme de cycle permet de :
while :
do
xset dpms force off
sleep .5
done
Je n'ai pas réfléchi plus loin - j'étais paresseux, ça remplit son rôle - les moniteurs n'affichent rien, même si j'appuie sur les boutons, bouge la souris, etc.
UPD:
merci
$ xrandr --output CRT1 --brightness 0
Supprimer l'entrée
Pour désactiver la saisie, 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)]
Dispositifs Noyau virtuel... vous ne pouvez pas le désactiver - une erreur s'affiche, mais le reste peut être activé et désactivé, par exemple, voici comment vous pouvez vous retrouver sans souris pendant une minute :
xinput disable 9; sleep 60; xinput enable 9
Готовое решение
Pour mon cas, j'ai créé un script que j'exécute dans une session ssh. Il supprime les entrées locales et active le serveur x11vnc, et une fois le script terminé, tout revient tel qu'il était. En conséquence, nous avons obtenu trois scripts, 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
désactiver_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, j'ai configuré un serveur commun et un pour chaque moniteur).
serveur_vnc :
#!/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
C'est tout. Connectez-vous via ssh et lancez serveur_vnc, tant qu'il est en vie, nous avons accès via vnc et la console locale est éteinte.
Merci de votre attention, les ajouts et améliorations sont les bienvenus.
Source: habr.com