StÀnger av lokal konsol vid anvÀndning av x11vnc

Hej alla,

det finns mÄnga artiklar pÄ nÀtet om hur man stÀller in fjÀrranslutning till en befintlig Xorg-session via x11vnc, men jag har aldrig sett hur man kan stÀnga av den lokala monitorn och inmatningen, sÄ att ingen som sitter bredvid den fjÀrranslutna datorn kan se vad du gör eller trycka pÄ knapparna i din session. Nedan Àr min metod för att göra x11vnc mer likt en anslutning till Windows via RDP.

SĂ„ lĂ„t oss anta att du redan kan anvĂ€nda x11vnc, om inte – du kan söka pĂ„ internet eller lĂ€sa till exempel ). Ett typiskt exempel pĂ„ anvĂ€ndning:.

Givet: vi kör x11vnc, ansluter till det med en klient, allt fungerar, men den lokala konsolen pÄ datorn Àr ocksÄ synlig för visning och inmatning.

Vi vill ha: stÀnga av den lokala konsolen (monitor + tangentbord + mus) sÄ att ingenting kan ses eller matas in.

Vi stÀnger av monitorn

Det första som kom upp i mitt huvud var att helt enkelt stÀnga av monitorn med xrandr, till exempel sÄ hÀr:

$ xrandr --output CRT1 --off

men dÄ börjar skrivbordsmiljön (jag har KDE) tro att monitorn faktiskt Àr avstÀngd och börjar flytta fönster och paneler, allt blir upp och ner och trist.
Det finns en mer intressant metod som innebÀr att föra monitorn i dvala, vilket kan göras sÄ hÀr:

$ xset dpms force off

men hÀr Àr inte allt perfekt. Systemet vÀcker monitorn vid första evenemanget. En enkel workaround i form av en loop hjÀlper:

while :
do
    xset dpms force off
    sleep .5
done

Sedan tĂ€nkte jag inte mer pĂ„ det — det var för jobbigt, det uppfyller sitt syfte — monitorerna visar ingenting, Ă€ven om knappar trycks, musen rörs, etc.

UPD:

Tack amarao för Ànnu en metod med att stÀnga ned ljusstyrkan till noll:

$ xrandr --output CRT1 --brightness 0

Vi stÀnger av inmatningen

För att stÀnga av inmatningen anvÀnde jag xinput. NÀr den körs utan parametrar skriver den ut en lista över enheter:

$ xinput
⎡ Virtuell kĂ€rnpointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtuell kĂ€rn XTEST-pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Laser Mouse                  id=9    [slave  pointer  (2)]
⎣ Virtuell kĂ€rntangentbord                         id=3    [master keyboard (2)]
    ↳ Virtuell kĂ€rn XTEST-tangentbord               id=5    [slave  keyboard (3)]
    ↳ Strömbrytare                              id=6    [slave  keyboard (3)]
    ↳ Strömbrytare                              id=7    [slave  keyboard (3)]
    ↳ Sömnbrytare                              id=8    [slave  keyboard (3)]
    ↳ USB 2.0 Kamera: HD 720P Webcam            id=10   [slave  keyboard (3)]
    ↳ HID 041e:30d3                             id=11   [slave  keyboard (3)]
    ↳ AT Översatt Set 2 tangentbord              id=12   [slave  keyboard (3)]

Enheter Virtuell kĂ€rn
 Det gĂ„r inte att stĂ€nga av — ett felmeddelande ges, men de andra kan slĂ„s av och pĂ„, till exempel kan du pĂ„ det hĂ€r sĂ€ttet vara utan mus i en minut:

xinput disable 9; sleep 60; xinput enable 9

FÀrdig lösning

För mitt fall gjorde jag ett skript som jag kör i en ssh-session. Det tysta lokala inmatningen och startar x11vnc-servern, och efter att skriptet Àr klart ÄterstÀlls allt som det var. I slutÀndan blev det tre skript, hÀr Àr de (uppdaterade).

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

Egentligen, huvudskriptet (jag har tvÄ skÀrmar, jag startar en gemensam server och en pÄ varje 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

Egentligen allt. Vi gÄr in via ssh, kör vnc_server, sÄ lÀnge det lever har vi tillgÄng via vnc och den lokala konsolen Àr avstÀngd.

Tack för uppmÀrksamheten, kompletteringar och förbÀttringar Àr vÀlkomna.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster