Hej alle,
der er mange artikler på internettet om, hvordan man opsætter fjernforbindelse til en eksisterende Xorg-session via x11vnc, men jeg har ikke kunnet finde ud af, hvordan man slukker for den lokale skærm og input, så enhver, der sidder ved siden af den fjerncomputer, ikke kan se, hvad du laver, og ikke kan trykke på knapper i din session. Nedenfor er min metode til at gøre x11vnc mere lignende en forbindelse til Windows via RDP.
Lad os sige, at du allerede ved, hvordan man bruger x11vnc; hvis ikke, kan du google det eller læse for eksempel .
Givet: vi starter x11vnc, forbinder til det med en klient, alt fungerer, men den lokale konsol er også tilgængelig for visning og input.
Vi ønsker: at slukke for den lokale konsol (skærm + tastatur + mus), så ingenting kan ses eller indtastes.
Slukker skærmene
Det første, der kom til at tænke på, var simpelthen at slukke for skærmen via xrandr, for eksempel:
$ xrandr --output CRT1 --off men ved dette begynder skrivebordsmiljøet (jeg har KDE) at tro, at skærmen faktisk er slukket og begynder at flytte vinduer og paneler, alt glider, og det bliver trist.
Der er en mere interessant metode, som går ud på at sende skærmen i dvale; dette kan gøres på denne måde:
$ xset dpms force offmen her er heller ikke alt glat. Systemet vækker skærmen ved den mindste begivenhed. En simpel hack i form af en løkke hjælper:
while :
do
xset dpms force off
sleep .5
doneJeg gad ikke tænke mere over det — jeg var doven, det udfører sit formål — skærmene viser ingenting, selv hvis man trykker på knapperne, rører ved musen osv.
OPD:
Tak for endnu en metode med at skrue lysstyrken ned til nul:
$ xrandr --output CRT1 --brightness 0Frakobler input
For at slå input fra brugte jeg xinput. Når det køres uden parametre, viser det en liste over enheder:
$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=9 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ USB 2.0 Camera: HD 720P Webcam id=10 [slave keyboard (3)]
↳ HID 041e:30d3 id=11 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)]Enheder Virtual core… det kan ikke slås fra – der opstår en fejl, men de andre kan slås til og fra, for eksempel kan man på denne måde være uden mus i et minut:
xinput disable 9; sleep 60; xinput enable 9Færdig løsning
Til mit tilfælde har jeg lavet et script, som jeg kører i en ssh-session. Det slukker for lokal input og starter x11vnc-serveren, og efter scriptet er færdigt, vender alt tilbage til det, som det var. Resultatet blev tre scripts, her er de (opdaterede).
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
doneEgentlig er det hovedscriptet (jeg har to skærme, jeg starter en fælles server og en på hver 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 x11vncDet er alt. Vi logger ind via ssh, starter vnc_server,mens det lever, har vi adgang via vnc og slukket lokal konsol.
Tak for opmærksomheden, tilføjelser og forbedringer er velkomne.
Kilde: habr.com
