Malebligu la lokan konzolon kiam vi uzas x11vnc

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 tie.

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:

Спасибо amarao por alia metodo kun turnado de la brileco al nulo:

$ 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

Aldoni komenton