Pozdravljeni vsi,
Na internetu je veliko člankov na temo, kako nastaviti oddaljeno povezavo z obstoječo sejo Xorg prek x11vnc, vendar nikjer nisem našel, kako onemogočiti lokalni monitor in vnos, tako da bi kdorkoli, ki sedi poleg oddaljenega računalnika, ne vidi, kaj počnete, in ne pritiska gumbov v vaši seji. Pod izrezom je moja metoda za izdelavo x11vnc bolj podobnega povezovanju z Windows prek RDP.
Torej, recimo, da že znate uporabljati x11vnc, če ne, lahko poguglate ali preberete npr.
Glede na: zaženemo x11nvc, se povežemo z odjemalcem, vse deluje, vendar je na voljo tudi lokalna konzola računalnika za ogled in vnos.
Želimo: izklopi lokalno konzolo (monitor + tipkovnica + miška), da se nič ne vidi ali vnese.
Izklop monitorjev
Prva stvar, ki mi je prišla na misel, je bila preprosto izklop monitorja prek xrandrja, na primer tako:
$ xrandr --output CRT1 --off
hkrati pa začne okensko okolje (imam KDE) misliti, da je monitor res izklopljen in začne metati okna in plošče, vse se premakne in postane žalostno.
Obstaja bolj zanimiv način, in sicer pošiljanje monitorja v stanje mirovanja, to lahko storite na primer takole:
$ xset dpms force off
a tudi tu ni vse gladko. Sistem zbudi monitor ob prvem dogodku. Najpreprostejša bergla v obliki cikla pomaga:
while :
do
xset dpms force off
sleep .5
done
Nisem več razmišljal - bil sem len, služi svojemu namenu - monitorji ne pokažejo ničesar, tudi če pritiskam gumbe, premikam miško itd.
UPS:
Hvala
$ xrandr --output CRT1 --brightness 0
Izrezovanje vnosa
Za onemogočanje vnosa sem uporabil xinput. Ko se zažene brez parametrov, prikaže seznam naprav:
$ 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)]
Naprave Virtualno jedro... ne morete ga onemogočiti - prikaže se napaka, ostalo pa lahko vklopite in izklopite, na primer, tako lahko ostanete brez miške za minuto:
xinput disable 9; sleep 60; xinput enable 9
Rešitev na ključ
Za svoj primer sem naredil skript, ki ga izvajam v seji ssh. Zatre lokalni vnos in dvigne strežnik x11vnc, po zaključku skripta pa se vse vrne, kot je bilo. Kot rezultat smo dobili tri skripte, tukaj so (posodobljene).
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
onemogoči_lokalno_konzolo:
#!/bin/sh
trap "switch_local_console 1" EXIT
while :
do
switch_local_console 0
sleep 1
done
Pravzaprav glavna skripta (imam dva monitorja, nastavil sem en skupni strežnik in enega za vsak monitor).
vnc_strežnik:
#!/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
To je vse. Prijavite se prek ssh in zaženite vnc_strežnik, dokler je živ imamo dostop preko vnc in lokalna konzola ugasne.
Hvala za vašo pozornost, dopolnitve in izboljšave so dobrodošle.
Vir: www.habr.com