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
