Saluton,
Estas multaj artikoloj en la Interreto pri la temo kiel agordi foran konekton al ekzistanta Xorg-sesio per x11vnc, sed mi ne trovis ie kiel subpremi la lokan monitoron kaj enigon por ke iu ajn sidanta apud la fora komputilo faru. ne vidas kion vi faras kaj ne premas butonojn en via sesio. Sub la tranĉo estas mia metodo por fari x11vnc pli simila al konekti al Vindozo per RDP.
Do, ni diru, ke vi jam scias kiel uzi x11vnc, se ne, vi povas gugli aŭ legi ekzemple
Donita: ni lanĉas x11nvc, konektas al ĝi kun la kliento, ĉio funkcias, sed la loka konzolo de la komputilo ankaŭ disponeblas por spektado kaj enigo.
Ni volas: malŝaltu la lokan konzolon (monitoro + klavaro + muso) por ke nenio povu vidi aŭ eniri.
Malŝalti la monitorojn
La unua afero, kiu venis en la menson, estis simple malŝalti la monitoron per xrandr, ekzemple jene:
$ xrandr --output CRT1 --off
sed samtempe, la fenestra medio (mi havas KDE) komencas pensi, ke la monitoro vere malŝaltas kaj komencas ĵeti fenestrojn kaj panelojn, ĉio elmoviĝas kaj malĝojiĝas.
Estas pli interesa maniero, kiu estas sendi la monitoron en vintrodormon, vi povas fari tion ekzemple tiel:
$ xset dpms force off
sed ankaŭ ĉi tie ne ĉio estas glata. La sistemo vekas la monitoron ĉe la unua evento. La plej simpla lambastono en formo de ciklo helpas:
while :
do
xset dpms force off
sleep .5
done
Mi ne pensis plu - mi estis maldiligenta, ĝi plenumas sian celon - la monitoroj montras nenion, eĉ se mi premas la butonojn, movas la muson ktp.
UPS:
Спасибо
$ xrandr --output CRT1 --brightness 0
Eltranĉante la enigaĵon
Por malŝalti enigon mi uzis xinput. Kiam ĝi estas lanĉita sen parametroj, ĝi montras liston de aparatoj:
$ 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)]
Aparatoj Virtuala kerno... vi ne povas malŝalti ĝin - eraro montriĝas, sed la resto povas esti ŝaltita kaj malŝaltita, ekzemple, jen kiel vi povas resti sen muso dum minuto:
xinput disable 9; sleep 60; xinput enable 9
Enŝlosita solvo
Por mia kazo, mi faris skripton, kiun mi rulas en ssh-sesio. Ĝi subpremas lokan enigon kaj levas la x11vnc-servilon, kaj post kompletigo de la skripto ĉio revenas kiel ĝi estis. Kiel rezulto, ni ricevis tri skriptojn, jen ili (ĝisdatigitaj).
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
Fakte, la ĉefa skripto (mi havas du monitorojn, mi starigis unu komunan servilon kaj unu por ĉiu monitoro).
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
Tio estas ĉio. Ensalutu per ssh kaj lanĉu vnc_servilo, dum li vivas, ni havas aliron per vnc kaj la loka konzolo estingiĝas.
Dankon pro via atento, aldonoj kaj plibonigoj estas bonvenaj.
fonto: www.habr.com