Kohaliku konsooli välja lülitamine, kui kasutatakse x11vnc

Tere kõigile,

internetis on palju artikleid teemal, kuidas seadistada kaugühendust olemasoleva Xorg sessiooniga x11vnc kaudu, kuid ma ei leidnud kuskilt, kuidas seejuures kohalik monitor ja sisend välja lülitada, et keegi, kes istub eemaloleva arvuti kõrval, ei näeks seda, mida teete, ega vajutaks teie sessioonis nuppusid. Allpool on minu meetod, kuidas teha x11vnc rohkem sarnaseks Windowsi RDP ühendusele.

Nii et oletame, et oskate juba kasutada x11vnc-d, kui ei, siis võib otsida või lugeda näiteks siin.

Antud: käivitame x11nvc, ühendume sellega kliendiga, kõik töötab, kuid kohalikke konsooli arvuti jaoks on samuti võimalik vaadata ja sisestada.

Soovitakse: välja lülitada kohaliku konsooli (monitor + klaviatuur + hiir) nii, et ei oleks võimalik midagi näha ega sisestada.

Lülitame monitorid välja

Esmalt, mis pähe tuli, oli lihtsalt monitori välja lülitamine näiteks xrandr kaudu nii:

$ xrandr --output CRT1 --off

kuid sellega arvuti graafiline keskkond (mul on KDE) hakkab arvama, et monitor on tõeliselt välja lülitatud ja hakkab aknaid ning paneele ümber tõstma, kõik läheb paigast ära ja muutub kurvaks.
On olemas huvitavam meetod, milleks on monitori magamapanek; seda saab teha näiteks nii:

$ xset dpms force off

aga siin pole ka kõik sujuv. Süsteem äratab monitori esimese sündmuse korral. Lihtne trikk, nagu tsükkel, aitab:

while :
do
    xset dpms force off
    sleep .5
done

Edasi ei mõelnud ma — mul oli laisk, see täidab oma eesmärki — monitorid ei näita midagi, isegi kui nuppe vajutada, hiirt raputada jne.

UPD:

Aitäh amarao teise meetodi kohta, milleks on heleduse nullimiseks keeramine:

$ xrandr --output CRT1 --brightness 0

Lülitame sisendi välja

Sissevõtu keelamiseks kasutasin xinputi. Käivitamisel ilma parameetriteta kuvab see seadmete loendi:

$ xinput
⎡ Virtuaalne põhitugevus                          id=2    [meistripointer  (3)]
⎜   ↳ Virtuaalne põhjalik XTEST pointer                id=4    [orjendipointer  (2)]
⎜   ↳ Logitech USB Laser Mouse                  id=9    [orjendi pointer  (2)]
⎣ Virtuaalne põhiklahvistik                         id=3    [meistriklahvistik (2)]
    ↳ Virtuaalne põhjalik XTEST klaviatuur               id=5    [orjendiklahvistik (3)]
    ↳ Toite nupp                              id=6    [orjendiklahvistik (3)]
    ↳ Toite nupp                              id=7    [orjendiklahvistik (3)]
    ↳ Une nupp                              id=8    [orjendiklahvistik (3)]
    ↳ USB 2.0 Kaamera: HD 720P Webcam            id=10   [orjendiklahvistik (3)]
    ↳ HID 041e:30d3                             id=11   [orjendiklahvistik (3)]
    ↳ AT tõlgitud komplekt 2 klaviatuur              id=12   [orjendiklahvistik (3)]

Seadmed Virtuaalne südamik… ei saa välja lülitada — kuvatakse viga, kuid teised saab sisse ja välja lülitada, näiteks nii saab jääda minutiks ilma hiireta:

xinput disable 9; sleep 60; xinput enable 9

Valmis lahendus

Oma juhtumi jaoks tegin skripti, mida käitan ssh sessioonis. See vaigistab kohaliku sisendi ja tõstab x11vnc serveri üles, pärast skripti lõppu naaseb kõik algsesse seisundisse. Tulemuseks on kolm skripti, siin nad on (uuendatud).

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

Peamine skript (mul on kaks monitori, tõstan ühe ühise serveri ja ühe igale monitorile).

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

Käime ssh kaudu, käivitame vnc_server, seni kuni see töötab, on meil vnc kaudu juurdepääs ja kohaliku konsooli välja lülitamine.

Aitäh tähelepanu eest, täiendused ja parandused on teretulnud.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster