Оневозможете ја локалната конзола кога користите x11vnc

Здраво на сите,

Има многу написи на Интернет на тема како да поставите далечинско поврзување со постоечка 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

Додадете коментар