Deaktiverer den lokale konsol, når der anvendes x11vnc

Hej alle,

der er mange artikler på internettet om, hvordan man opsætter fjernforbindelse til en eksisterende Xorg-session via x11vnc, men jeg har ikke kunnet finde ud af, hvordan man slukker for den lokale skærm og input, så enhver, der sidder ved siden af den fjerncomputer, ikke kan se, hvad du laver, og ikke kan trykke på knapper i din session. Nedenfor er min metode til at gøre x11vnc mere lignende en forbindelse til Windows via RDP.

Lad os sige, at du allerede ved, hvordan man bruger x11vnc; hvis ikke, kan du google det eller læse for eksempel her.

Givet: vi starter x11vnc, forbinder til det med en klient, alt fungerer, men den lokale konsol er også tilgængelig for visning og input.

Vi ønsker: at slukke for den lokale konsol (skærm + tastatur + mus), så ingenting kan ses eller indtastes.

Slukker skærmene

Det første, der kom til at tænke på, var simpelthen at slukke for skærmen via xrandr, for eksempel:

$ xrandr --output CRT1 --off

men ved dette begynder skrivebordsmiljøet (jeg har KDE) at tro, at skærmen faktisk er slukket og begynder at flytte vinduer og paneler, alt glider, og det bliver trist.
Der er en mere interessant metode, som går ud på at sende skærmen i dvale; dette kan gøres på denne måde:

$ xset dpms force off

men her er heller ikke alt glat. Systemet vækker skærmen ved den mindste begivenhed. En simpel hack i form af en løkke hjælper:

while :
do
    xset dpms force off
    sleep .5
done

Jeg gad ikke tænke mere over det — jeg var doven, det udfører sit formål — skærmene viser ingenting, selv hvis man trykker på knapperne, rører ved musen osv.

OPD:

Tak amarao for endnu en metode med at skrue lysstyrken ned til nul:

$ xrandr --output CRT1 --brightness 0

Frakobler input

For at slå input fra brugte jeg xinput. Når det køres uden parametre, viser det en liste over enheder:

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

Enheder Virtual core… det kan ikke slås fra – der opstår en fejl, men de andre kan slås til og fra, for eksempel kan man på denne måde være uden mus i et minut:

xinput disable 9; sleep 60; xinput enable 9

Færdig løsning

Til mit tilfælde har jeg lavet et script, som jeg kører i en ssh-session. Det slukker for lokal input og starter x11vnc-serveren, og efter scriptet er færdigt, vender alt tilbage til det, som det var. Resultatet blev tre scripts, her er de (opdaterede).

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

Egentlig er det hovedscriptet (jeg har to skærme, jeg starter en fælles server og en på hver skærm).

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

Det er alt. Vi logger ind via ssh, starter vnc_server,mens det lever, har vi adgang via vnc og slukket lokal konsol.

Tak for opmærksomheden, tilføjelser og forbedringer er velkomne.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster