Sveiki visiem,
Internetā ir daudz rakstu par tēmu, kā izveidot attālo savienojumu ar esošo Xorg sesiju, izmantojot x11vnc, bet es nekur neesmu atradis, kā nospiest vietējo monitoru un ievadi, lai ikviens, kas sēž blakus attālajam datoram, to darītu. neredz, ko jūs darāt, un sesijas laikā nespieda pogas. Zem griezuma ir mana metode, kā padarīt x11vnc līdzīgāku savienojuma izveidei ar Windows, izmantojot RDP.
Tātad, pieņemsim, ka jūs jau zināt, kā lietot x11vnc, ja nē, varat google vai lasīt piem.
Ņemot vērā: palaižam x11nvc, pieslēdzamies ar klientu, viss strādā, bet apskatei un ievadei ir pieejama arī datora lokālā konsole.
Mēs gribam: izslēdziet lokālo konsoli (monitors + tastatūra + pele), lai neko nevar redzēt vai ievadīt.
Monitoru izslēgšana
Pirmā lieta, kas ienāca prātā, bija vienkārši izslēgt monitoru, izmantojot xrandr, piemēram, šādi:
$ xrandr --output CRT1 --off
bet tajā pašā laikā logu vide (man ir KDE) sāk domāt, ka monitors tiešām ir izslēgts un sāk mest logus un paneļus, viss izkustas un kļūst skumji.
Ir vēl interesantāks veids, proti, monitora pārsūtīšana hibernācijas režīmā, to var izdarīt, piemēram, šādi:
$ xset dpms force off
bet arī šeit ne viss ir gludi. Sistēma pamodina monitoru pirmajā notikumā. Vienkāršākais kruķis cikla veidā palīdz:
while :
do
xset dpms force off
sleep .5
done
Tālāk nedomāju - biju slinks, tas pilda savu mērķi - monitori neko nerāda, pat ja nospiežu pogas, kustinu peli utt.
UPD:
Paldies
$ xrandr --output CRT1 --brightness 0
Ievades izgriešana
Lai atspējotu ievadi, es izmantoju xinput. Palaižot bez parametriem, tiek parādīts ierīču saraksts:
$ 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)]
Ierīces Virtuālais kodols... jūs to nevarat atspējot - tiek parādīta kļūda, bet pārējo var ieslēgt un izslēgt, piemēram, šādi varat uz minūti palikt bez peles:
xinput disable 9; sleep 60; xinput enable 9
Ieslēgts risinājums
Manam gadījumam es izveidoju skriptu, ko palaist ssh sesijā. Tas nomāc vietējo ievadi un paaugstina x11vnc serveri, un pēc skripta pabeigšanas viss atgriežas tā, kā bija. Rezultātā mēs saņēmām trīs skriptus, šeit tie ir (atjaunināti).
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
Patiesībā galvenais skripts (man ir divi monitori, es iestatīju vienu kopīgu serveri un vienu katram monitoram).
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
Tas ir viss. Piesakieties caur ssh un palaidiet vnc_serveris, kamēr viņš ir dzīvs, mums ir pieeja caur vnc un vietējā konsole ir dzēsta.
Paldies par uzmanību, laipni gaidīti papildinājumi un uzlabojumi.
Avots: www.habr.com