Kohaliku konsooli välja lülitamine x11vnc kasutamise ajal

Tere, kõik!

Internetis on palju artikleid selle kohta, kuidas seadistada kaugühendus olemasolevale Xorg sessioonile x11vnc kaudu, kuid ma ei leidnud kusagilt, kuidas samal ajal kohaliku monitori ja sisendit välja lülitada, et keegi, kes istub kaugarvuti lähedal, ei näeks seda, mida teete, ja ei saaks nuppudele vajutada. Allpool on minu viis, kuidas muuta x11vnc sarnasemaks Windowsi RDP-le.

Nii et eeldame, et te juba oskate x11vnc kasutada, kui ei, siis saate googeldada või lugeda näiteks siit.

Antud: käivitame x11nvc, ühendame sellega kliendi, kõik töötab, kuid arvuti kohaliku konsooli on samuti võimalik vaadata ja sisestada.

Tahame: peame välja lülitama kohaliku konsooli (monitor + klaviatuur + hiir) nii, et mitte midagi ei saa näha ja ei saa sisse kirjutada.

Lülitame monitorid välja

Esimene mõte oli lihtsalt monitor xrandri kaudu välja lülitada, näiteks nii:

$ xrandr --output CRT1 --off

aga sel juhul hakkab akendesüsteem (mul on KDE) arvama, et monitor on tõeliselt välja lülitatud ja hakkab aknaid ning paneele ringi viskama, kõik läheb paigast ära ja muutub kurvaks.
On huvitavam viis, mis seisneb monitori unerežiimi saatmises, seda saab teha näiteks nii:

$ xset dpms force off

aga siinki ei ole kõik sujuv. Süsteem äratab monitori esimesel sündmusel. Aitab lihtne lahendus tsükli näol:

while :
do
    xset dpms force off
    sleep .5
done

Edasi ei hakanud ma mõtlema - lihtsalt ei viitsinud, see täidab oma eesmärki - monitorid ei näita midagi, isegi kui nuppudele vajutada, hiirega tuhnida jne.

UPD:

Aitäh amarao veel üks viis, et vähendada heledust nulli:

$ xrandr --output CRT1 --brightness 0

Lülitame sisendi välja

Sise sisendi väljalülitamiseks kasutasin xinputi. Käivitamisel ilma parameetriteta toob see välja seadmete loendi:

$ xinput
⎡ Virtuaalne tuumikpointer                           id=2    [meister pointer  (3)]
⎜   ↳ Virtuaalne tuumik XTEST pointer                id=4    [orjade pointer  (2)]
⎜   ↳ Logitech USB Laser hiir                      id=9    [orjade pointer  (2)]
⎣ Virtuaalne tuumikklaviatuur                       id=3    [meister klaviatuur (2)]
    ↳ Virtuaalne tuumik XTEST klaviatuur           id=5    [orjade klaviatuur (3)]
    ↳ Toite nupp                                  id=6    [orjade klaviatuur (3)]
    ↳ Toite nupp                                  id=7    [orjade klaviatuur (3)]
    ↳ Unenupp                                    id=8    [orjade klaviatuur (3)]
    ↳ USB 2.0 Kaamera: HD 720P Webcam              id=10   [orjade klaviatuur (3)]
    ↳ HID 041e:30d3                               id=11   [orjade klaviatuur (3)]
    ↳ AT Tõlgitud komplekt 2 klaviatuur            id=12   [orjade klaviatuur (3)]

Seadmed Virtuaalne tuumik… välja lülitamine ei õnnestu — kuvab vea, kuid teisi saab sisse ja välja lülitada, näiteks nii saab minutiks arvutita jääda:

xinput disable 9; sleep 60; xinput enable 9

Valmis lahendus

Oma juhtumi jaoks tegin skripti, mida käitan ssh sessioonis. See vaikib kohalikku sisendi ja tõstab x11vnc serveri üles, ning skripti lõpetamisel taastab kõik nagu oli. Lõpuks sain kolm skripti, siin need 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

Tegelikult peamine skript (mul on kaks ekraani, tõstan ühe ühise serveri ja iga ekraani kohta ühe).

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

Tegelikult kõik. Logime sisse ssh, käivitame vnc_server, kuni see elab, on meil vnc kaudu juurdepääs ja kohalik konsool on välja lülitatud.

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

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster