Онемогућите локалну конзолу када користите к11внц

Поздрав свима,

Постоји много чланака на Интернету на тему како да подесите удаљену везу са постојећом Ксорг сесијом преко к11внц, али нигде нисам нашао како да потиснем локални монитор и унос тако да свако ко седи поред удаљеног рачунара не не видите шта радите и не притискате дугмад у вашој сесији. Испод реза је мој метод да учиним к11внц сличнијим повезивању на Виндовс преко РДП-а.

Дакле, рецимо да већ знате како да користите к11внц, ако не, можете гуглати или читати нпр. овде.

Дато: покрећемо к11нвц, повезујемо се са њим са клијентом, све ради, али је и локална конзола рачунара доступна за преглед и унос.

Желимо: искључите локалну конзолу (монитор + тастатура + миш) да се ништа не види или уђе.

Искључивање монитора

Прво што ми је пало на памет је да једноставно искључите монитор преко крандра, на пример овако:

$ xrandr --output CRT1 --off

али у исто време, прозорско окружење (имам КДЕ) почиње да мисли да је монитор заиста искључен и почиње да баца прозоре и панеле, све се помера и постаје тужно.
Постоји занимљивији начин, а то је слање монитора у хибернацију, то можете урадити на пример овако:

$ xset dpms force off

али ни овде није све глатко. Систем буди монитор при првом догађају. Најједноставнија штака у облику циклуса помаже:

while :
do
    xset dpms force off
    sleep .5
done

Нисам даље размишљао - био сам лењ, служи својој сврси - монитори не показују ништа, чак и ако притиснем дугмад, померим миша итд.

УПД:

захвалити амарао за други метод са окретањем осветљености на нулу:

$ xrandr --output CRT1 --brightness 0

Исецање улаза

Да бих онемогућио унос, користио сам кинпут. Када се покрене без параметара, приказује листу уређаја:

$ 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

Решење на кључ

За мој случај, направио сам скрипту коју покрећем у ссх сесији. Он потискује локални унос и подиже к11внц сервер, а по завршетку скрипте све се враћа како је било. Као резултат, добили смо три скрипте, ево их (ажурираних).

свитцх_лоцал_цонсоле:

#!/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

дисабле_лоцал_цонсоле:

#!/bin/sh

trap "switch_local_console 1" EXIT

while :
do
    switch_local_console 0
    sleep 1
done

Заправо, главна скрипта (имам два монитора, поставио сам један заједнички сервер и један за сваки монитор).

внц_сервер:

#!/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

То је све. Пријавите се преко ссх-а и покрените внц_сервер, док је жив имамо приступ преко внц и локална конзола се гаси.

Хвала вам на пажњи, додаци и побољшања су добродошли.

Извор: ввв.хабр.цом

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