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