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

Bonjour à tous,

Dans l'univers d'Internet, il existe de nombreux articles sur la façon de configurer une connexion distante à une session Xorg existante via x11vnc, mais je n'ai trouvé nulle part comment désactiver le moniteur et l'entrée locaux afin que quiconque assis à côté de l'ordinateur distant ne puisse pas voir ce que vous faites ni appuyer sur les touches de votre session. Voici ma méthode pour rendre x11vnc plus semblable à une connexion Windows via RDP.

Donc, supposons que vous savez déjà utiliser x11vnc, si ce n'est pas le cas, vous pouvez faire une recherche ou lire par exemple ici.

Étant donné : nous lançons x11vnc, nous nous y connectons avec un client, tout fonctionne, mais la console locale de l'ordinateur est également accessible à la visualisation et à l'entrée.

Nous voulons : désactiver la console locale (moniteur + clavier + souris) de sorte que rien ne puisse être vu ou saisi.

Nous éteignons les moniteurs

La première chose qui m'est venue à l'esprit a été simplement de débrancher le moniteur via xrandr par exemple comme ceci :

$ xrandr --output CRT1 --off

mais à ce moment-là, l'environnement de bureau (j'utilise KDE) commence à penser que le moniteur est réellement déconnecté et commence à déplacer les fenêtres et les barres, tout se déplace et devient triste.
Il existe un moyen plus intéressant, qui consiste à mettre le moniteur en veille, ce que vous pouvez faire par exemple comme ceci :

$ xset dpms force off

mais ici aussi, tout n'est pas fluide. Le système réveille le moniteur dès le premier événement. Une simple astuce en boucle aide :

while :
do
    xset dpms force off
    sleep .5
done

Je ne me suis pas arrêté là — j'avais la flemme, ça remplit son objectif — les moniteurs n'affichent rien, même si vous appuyez sur des boutons, bougez la souris, etc.

Mise à jour :

Merci amarao pour une autre méthode consistant à régler la luminosité à zéro :

$ xrandr --output CRT1 --brightness 0

Nous désactivons l'entrée

Pour désactiver l'entrée, j'ai utilisé xinput. En démarrant sans paramètres, il affiche une liste de dispositifs :

$ xinput
⎡ Pointeur virtuel de base                          id=2    [pointeur maître  (3)]
⎜   ↳ Pointeur XTEST virtuel                        id=4    [pointeur esclave  (2)]
⎜   ↳ Souris laser USB Logitech                      id=9    [pointeur esclave  (2)]
⎣ Clavier virtuel de base                         id=3    [clavier maître (2)]
    ↳ Clavier XTEST virtuel                         id=5    [clavier esclave (3)]
    ↳ Bouton d'alimentation                          id=6    [clavier esclave (3)]
    ↳ Bouton d'alimentation                          id=7    [clavier esclave (3)]
    ↳ Bouton de mise en veille                        id=8    [clavier esclave (3)]
    ↳ Caméra USB 2.0 : Webcam HD 720P               id=10   [clavier esclave (3)]
    ↳ HID 041e:30d3                                 id=11   [clavier esclave (3)]
    ↳ Clavier AT Translated Set 2                   id=12   [clavier esclave (3)]

Appareils Noyau virtuel… vous ne pouvez pas désactiver — une erreur est renvoyée, mais vous pouvez activer et désactiver les autres, par exemple, vous pouvez rester sans souris pendant une minute comme ça :

xinput disable 9; sleep 60; xinput enable 9

Solution prête

Pour mon cas, j'ai créé un script que je lance dans une session ssh. Il désactive l'entrée locale et démarre le serveur x11vnc, et à la fin du script, tout revient comme avant. Au final, cela a donné 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

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 démarre un serveur commun et un sur 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

Voilà, tout est dit. Vous vous connectez par ssh, vous démarrez vnc_server, tant qu'il est actif, nous avons accès via vnc et la console locale est désactivée.

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

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster