Deshabilite la consola local cuando use x11vnc

Hola a todos

En Internet, hay muchos artículos sobre cómo configurar una conexión remota a una sesión Xorg existente a través de x11vnc, pero no he encontrado en ninguna parte cómo fijar el monitor local y la entrada para que cualquiera que se siente al lado de la computadora remota no vea lo que está haciendo y no presionó botones en su sesión. Bajo cat, mi forma de hacer que x11vnc se parezca más a conectarse a Windows a través de RDP.

Entonces, digamos que ya sabe cómo usar x11vnc, si no, puede googlear o leer, por ejemplo, aquí .

Dado: inicie x11nvc, conéctese con el cliente, todo funciona, pero la consola de la computadora local también está disponible para su visualización y entrada.

Queremos: cortar la consola local (monitor + teclado + mouse) para que no se pueda ver ni ingresar nada.

Cortamos monitores


Lo primero que se me ocurrió fue cortar el monitor a través de xrandr, por ejemplo, así:

$ xrandr --output CRT1 --off 

pero al mismo tiempo, el entorno de la ventana (tengo KDE) comienza a pensar que el monitor está realmente apagado y comienza a arrojar ventanas y paneles, todo se mueve y se pone triste.
Hay una forma más interesante, que es enviar el monitor a la suspensión, puede hacer esto, por ejemplo, de esta manera:

 $ xset dpms force off 

Pero aquí, también, no todo va bien. El sistema activa el monitor en el primer evento. La muleta más simple en forma de ciclo ayuda a:

 while : do xset dpms force off sleep .5 done 

No pensé más: fue pereza, cumple su propósito, los monitores no muestran nada, incluso si presiona botones, mueve el mouse, etc.

UPD:

Gracias amarao por otra forma de girar a cero brillo:
 $ xrandr --output CRT1 --brightness 0 


Cortar la entrada


Para deshabilitar la entrada, usé xinput. Cuando se inicia sin parámetros, muestra una lista de dispositivos:

 $ 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)] 

Los dispositivos de núcleo virtual ... no se pueden deshabilitar: se emite un error, pero el resto se puede encender y apagar, por ejemplo, de esta manera, puede permanecer sin mouse por un minuto:

 xinput disable 9; sleep 60; xinput enable 9 

Solución llave en mano


Para mi caso, hice un script que se ejecuta en sesión ssh. Suprime la entrada local y eleva el servidor x11vnc, y al completar el script todo vuelve como estaba. Como resultado, resultaron tres scripts, aquí están (actualizados).

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 realidad, el script principal (tengo dos monitores, levanto un servidor común y uno para cada monitor).

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 realidad todo. Vamos por ssh, ejecutamos vnc_server mientras está vivo, tenemos acceso a través de vnc y la consola local se apaga.

Gracias por su atención, adiciones y mejoras son bienvenidas.

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


All Articles