Здраво на сите,
Има многу написи на Интернет на тема како да поставите далечинско поврзување со постоечка Xorg сесија преку x11vnc, но никаде не најдов како да го потиснам локалниот монитор и внесување, така што секој што седи до оддалечениот компјутер го прави тоа не гледа што правите и не притиска копчиња во вашата сесија. Под сечењето е мојот метод за правење x11vnc посличен на поврзувањето со Windows преку RDP.
Значи, да речеме дека веќе знаете како да користите x11vnc, ако не, можете да гуглате или да прочитате на пример
Со оглед: го лансираме x11nvc, се поврзуваме со него со клиентот, сè работи, но локалната конзола на компјутерот е исто така достапна за прегледување и внесување.
Ние сакаме: исклучете ја локалната конзола (монитор + тастатура + глушец) за ништо да не се гледа или внесува.
Исклучување на мониторите
Првото нешто што ми падна на ум беше едноставно да го исклучите мониторот преку xrandr, на пример вака:
$ xrandr --output CRT1 --off
но во исто време, околината за прозорци (имам KDE) почнува да мисли дека мониторот е навистина исклучен и почнува да фрла прозорци и панели, сè се поместува и станува тажно.
Постои поинтересен начин, а тоа е да го испратите мониторот во хибернација, можете да го направите ова на пример вака:
$ xset dpms force off
но и овде не е сè мазно. Системот го буди мониторот на првиот настан. Наједноставната патерица во форма на циклус помага:
while :
do
xset dpms force off
sleep .5
done
Не размислував понатаму - бев мрзлив, тоа ја служи својата цел - мониторите не покажуваат ништо, дури и ако ги притиснам копчињата, го мрдам глувчето итн.
UPD:
Благодарение
$ xrandr --output CRT1 --brightness 0
Отсекување на влезот
За да го оневозможам внесувањето користев xinput. Кога се стартува без параметри, прикажува список на уреди:
$ 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)]
Уреди Виртуелно јадро... не можете да го оневозможите - се прикажува грешка, но остатокот може да се вклучи и исклучи, на пример, вака можете да останете без глушец една минута:
xinput disable 9; sleep 60; xinput enable 9
Решавање на клуч
За мојот случај, направив скрипта што ја извршувам во ssh сесија. Го потиснува локалниот влез и го подига серверот x11vnc, а по завршувањето на скриптата сè се враќа како што било. Како резултат на тоа, добивме три скрипти, еве ги (ажурирани).
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
Всушност, главната скрипта (имам два монитори, поставив еден заеднички сервер и по еден за секој монитор).
vnc_сервер:
#!/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
Тоа е се. Најавете се преку ssh и стартувајте vnc_сервер, додека е жив имаме пристап преку vnc и локалната конзола е изгаснат.
Ви благодариме за вниманието, дополнувањата и подобрувањата се добредојдени.
Извор: www.habr.com