Hej alle,
Der er mange artikler på internettet om emnet, hvordan man opsætter en fjernforbindelse til en eksisterende Xorg-session via x11vnc, men jeg har ikke fundet nogen steder, hvordan man undertrykker den lokale skærm og input, så enhver, der sidder ved siden af fjerncomputeren, ikke kan se, hvad du laver og ikke trykke på knapper i din session. Nedenfor snittet er min metode til at gøre x11vnc mere lig at oprette forbindelse til Windows via RDP.
Så lad os sige, at du allerede ved, hvordan du bruger x11vnc, hvis ikke, kan du google eller læse f.eks.
Givet: vi starter x11nvc, forbinder til det med klienten, alt fungerer, men den lokale konsol på computeren er også tilgængelig til visning og input.
Vi vil have: sluk for den lokale konsol (skærm + tastatur + mus), så intet kan ses eller indtastes.
Sluk for skærme
Det første, der kom til at tænke på, var simpelthen at slukke for skærmen via xrandr, for eksempel sådan her:
$ xrandr --output CRT1 --off
men på samme tid begynder vinduesmiljøet (jeg har KDE) at tro at skærmen virkelig er slukket og begynder at kaste vinduer og paneler, alt flytter ud og bliver trist.
Der er en mere interessant måde, som er at sende skærmen i dvale, du kan for eksempel gøre dette på denne måde:
$ xset dpms force off
men heller ikke her er alt glat. Systemet vækker monitoren ved den første begivenhed. Den enkleste krykke i form af en cyklus hjælper:
while :
do
xset dpms force off
sleep .5
done
Jeg tænkte ikke videre - jeg var doven, det tjener sit formål - skærmene viser ikke noget, selvom jeg trykker på knapperne, flytter musen osv.
UPS:
Tak
$ xrandr --output CRT1 --brightness 0
Udskæring af input
For at deaktivere input brugte jeg xinput. Når den startes uden parametre, viser den 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 Virtuel kerne... du kan ikke deaktivere det - en fejl vises, men resten kan tændes og slukkes, for eksempel, sådan kan du stå uden mus i et minut:
xinput disable 9; sleep 60; xinput enable 9
Færdiglavet opløsning
Til mit tilfælde lavede jeg et script, som jeg kører i en ssh-session. Det undertrykker lokalt input og hæver x11vnc-serveren, og efter fuldførelse af scriptet vender alt tilbage, som det var. Som et resultat fik vi tre scripts, her er de (opdateret).
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
Faktisk er hovedscriptet (jeg har to skærme, jeg sætter en fælles server op og en til 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 x11vnc
Det er alt. Log ind via ssh og start vnc_server, mens han er i live, har vi adgang via vnc, og den lokale konsol er slukket.
Tak for din opmærksomhed, tilføjelser og forbedringer er velkomne.
Kilde: www.habr.com