Përshëndetje,
Ka shumë artikuj në internet mbi temën se si të konfiguroni një lidhje në distancë me një sesion ekzistues Xorg përmes x11vnc, por nuk kam gjetur askund se si të shtypni monitorin lokal dhe hyrjen në mënyrë që kushdo që ulet pranë kompjuterit në distancë të bëjë nuk shikon se çfarë po bën dhe nuk shtyp butonat në seancën tënde. Më poshtë prerjes është metoda ime për ta bërë x11vnc më të ngjashëm me lidhjen me Windows përmes RDP.
Pra, le të themi se ju tashmë dini se si të përdorni x11vnc, nëse jo, mund të kërkoni në google ose të lexoni për shembull
duke pasur parasysh: ne lëshojmë x11nvc, lidhemi me të me klientin, gjithçka funksionon, por tastiera lokale e kompjuterit është gjithashtu e disponueshme për shikim dhe hyrje.
Ne duam: fikni konsolën lokale (monitor + tastierë + miun) në mënyrë që asgjë të mos shihet ose të futet.
Fikja e monitorëve
Gjëja e parë që më erdhi në mendje ishte thjesht të fikni monitorin përmes xrandr, për shembull si kjo:
$ xrandr --output CRT1 --off
por në të njëjtën kohë, mjedisi i dritareve (kam KDE) fillon të mendojë se monitori është fikur vërtet dhe fillon të hedhë dritare dhe panele, gjithçka largohet dhe bëhet e trishtuar.
Ekziston një mënyrë më interesante, e cila është dërgimi i monitorit në letargji, ju mund ta bëni këtë për shembull si kjo:
$ xset dpms force off
por edhe këtu jo gjithçka është e qetë. Sistemi zgjon monitorin në ngjarjen e parë. Paterica më e thjeshtë në formën e një cikli ndihmon:
while :
do
xset dpms force off
sleep .5
done
Nuk mendova më tej - isha dembel, i shërben qëllimit të saj - monitorët nuk tregojnë asgjë, edhe nëse shtyp butonat, lëviz miun, etj.
UPD:
Falënderim
$ xrandr --output CRT1 --brightness 0
Prerja e hyrjes
Për të çaktivizuar hyrjen kam përdorur xinput. Kur niset pa parametra, ai shfaq një listë të pajisjeve:
$ 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)]
Pajisjet Bërthama virtuale... nuk mund ta çaktivizoni - shfaqet një gabim, por pjesa tjetër mund të ndizet dhe fiket, për shembull, kështu mund të mbeteni pa miun për një minutë:
xinput disable 9; sleep 60; xinput enable 9
Zgjidhje e gatshme
Për rastin tim, bëra një skript që e ekzekutoj në një seancë ssh. Ai shtyp hyrjen lokale dhe ngre serverin x11vnc, dhe pas përfundimit të skriptit gjithçka kthehet siç ishte. Si rezultat, ne morëm tre skripta, këtu janë ato (të përditësuara).
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
Në fakt, skenari kryesor (kam dy monitorë, kam vendosur një server të përbashkët dhe një për çdo monitor).
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
Kjo eshte e gjitha. Hyni përmes ssh dhe nisni vnc_server, sa eshte gjalle kemi akses nepermjet vnc dhe konsola lokale eshte fikur.
Faleminderit për vëmendjen tuaj, shtesat dhe përmirësimet janë të mirëseardhura.
Burimi: www.habr.com