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 .
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 offmen 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
doneSedan 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 för Ànnu en metod med att stÀnga ned ljusstyrkan till noll:
$ xrandr --output CRT1 --brightness 0Vi 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 9FÀ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
doneEgentligen, 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 x11vncEgentligen 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
