x11vnc เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชธเซเชฅเชพเชจเชฟเช• เช•เชจเซเชธเซ‹เชฒเชจเซ‡ เชจเชฟเชทเซเช•เซเชฐเชฟเชฏ เช•เชฐเซ‹

เชฆเชฐเซ‡เช•เชจเซ‡ เชจเชฎเชธเซเช•เชพเชฐ,

x11vnc เชฆเซเชตเชพเชฐเชพ เชนเชพเชฒเชจเชพ Xorg เชธเชคเซเชฐเชฎเชพเช‚ เชฐเชฟเชฎเซ‹เชŸ เช•เชจเซ‡เช•เซเชถเชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เชคเซ‡ เชตเชฟเชทเชฏ เชชเชฐ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐ เช˜เชฃเชพ เชฒเซ‡เช–เซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เช•เซเชฏเชพเช‚เชฏ เชฎเชณเซเชฏเซเช‚ เชจเชฅเซ€ เช•เซ‡ เชธเซเชฅเชพเชจเชฟเช• เชฎเซ‹เชจเชฟเชŸเชฐ เช…เชจเซ‡ เช‡เชจเชชเซเชŸเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฆเชฌเชพเชตเชตเซเช‚ เชœเซ‡เชฅเซ€ เชฐเชฟเชฎเซ‹เชŸ เช•เชฎเซเชชเซเชฏเซเชŸเชฐเชจเซ€ เชฌเชพเชœเซเชฎเชพเช‚ เชฌเซ‡เช เซ‡เชฒเชพ เช•เซ‹เชˆเชชเชฃ เชคเชฎเซ‡ เชถเซเช‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‹ เชคเซ‡ เชœเซ‹เชคเชพ เชจเชฅเซ€ เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชธเชคเซเชฐเชฎเชพเช‚ เชฌเชŸเชจเซ‹ เชฆเชฌเชพเชตเชคเชพ เชจเชฅเซ€. เช•เชŸ เชจเซ€เชšเซ‡ x11vnc เชจเซ‡ RDP เชฎเชพเชฐเชซเชค เชตเชฟเชจเซเชกเซ‹เช เชธเชพเชฅเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพ เชธเชฎเชพเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชฐเซ€ เชชเชฆเซเชงเชคเชฟ เช›เซ‡.

เชคเซ‡เชฅเซ€, เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เชคเชฎเซ‡ x11vnc เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹ เชคเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชœเชพเชฃเซ‹ เช›เซ‹, เชœเซ‹ เชจเชนเซ€เช‚, เชคเซ‹ เชคเชฎเซ‡ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช—เซ‚เช—เชฒ เช…เชฅเชตเชพ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชนเซ€เช‚.

เช†เชชเซ‡เชฒ: เช…เชฎเซ‡ x11nvc เชฒเซ‹เชจเซเชš เช•เชฐเซ€เช เช›เซ€เช, เชคเซ‡เชจเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เชธเชพเชฅเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ€เช เช›เซ€เช, เชฌเชงเซเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช•เชฎเซเชชเซเชฏเซเชŸเชฐเชจเซเช‚ เชธเซเชฅเชพเชจเชฟเช• เช•เชจเซเชธเซ‹เชฒ เชœเซ‹เชตเชพ เช…เชจเซ‡ เช‡เชจเชชเซเชŸ เชฎเชพเชŸเซ‡ เชชเชฃ เช‰เชชเชฒเชฌเซเชง เช›เซ‡.

เช…เชฎเซ‡ เชˆเชšเซเช›เซ€เช เช›เซ€เช: เชฒเซ‹เช•เชฒ เช•เชจเซเชธเซ‹เชฒ (เชฎเซ‹เชจเชฟเชŸเชฐ + เช•เซ€เชฌเซ‹เชฐเซเชก + เชฎเชพเช‰เชธ) เชฌเช‚เชง เช•เชฐเซ‹ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เช•เชถเซเช‚ เชœเซ‹เชˆ เช•เซ‡ เชฆเชพเช–เชฒ เชจ เชฅเชˆ เชถเช•เซ‡.

เชฎเซ‹เชจเชฟเชŸเชฐเซเชธ เชฌเช‚เชง เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซ เชœเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เช†เชตเซ€ เชคเซ‡ เชซเช•เซเชค xrandr เชฆเซเชตเชพเชฐเชพ เชฎเซ‹เชจเชฟเชŸเชฐเชจเซ‡ เชฌเช‚เชง เช•เชฐเชตเชพเชจเซเช‚ เชนเชคเซเช‚, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚:

$ xrandr --output CRT1 --off

เชชเชฐเช‚เชคเซ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เชตเชฟเชจเซเชกเซ‹เช‡เช‚เช— เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ (เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ KDE เช›เซ‡) เชเชตเซเช‚ เชตเชฟเชšเชพเชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช–เชฐเซ‡เช–เชฐ เชฌเช‚เชง เช›เซ‡ เช…เชจเซ‡ เชตเชฟเชจเซเชกเซ‹ เช…เชจเซ‡ เชชเซ‡เชจเชฒ เชซเซ‡เช‚เช•เชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡, เชฌเชงเซเช‚ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเซ€ เชœเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เช‰เชฆเชพเชธเซ€ เชฌเชจเซ€ เชœเชพเชฏ เช›เซ‡.
เชคเซเชฏเชพเช‚ เชเช• เชตเชงเซ เชฐเชธเชชเซเชฐเชฆ เชฐเซ€เชค เช›เซ‡, เชœเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐเชจเซ‡ เชนเชพเช‡เชฌเชฐเชจเซ‡เชถเชจเชฎเชพเช‚ เชฎเซ‹เช•เชฒเชตเชพเชจเซ€ เช›เซ‡, เชคเชฎเซ‡ เช† เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚:

$ xset dpms force off

เชชเชฐเช‚เชคเซ เช…เชนเซ€เช‚ เชชเชฃ, เชฌเชงเซเช‚ เชธเชฐเชณ เชจเชฅเซ€. เชธเชฟเชธเซเชŸเชฎ เชชเซเชฐเชฅเชฎ เช‡เชตเซ‡เชจเซเชŸเชฎเชพเช‚ เชฎเซ‹เชจเชฟเชŸเชฐเชจเซ‡ เชœเชพเช—เซƒเชค เช•เชฐเซ‡ เช›เซ‡. เชšเช•เซเชฐเชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชธเซŒเชฅเซ€ เชธเชฐเชณ เช•เซเชฐเชš เชฎเชฆเชฆ เช•เชฐเซ‡ เช›เซ‡:

while :
do
    xset dpms force off
    sleep .5
done

เชฎเซ‡เช‚ เช†เช—เชณ เชตเชฟเชšเชพเชฐเซเชฏเซเช‚ เชจ เชนเชคเซเช‚ - เชนเซเช‚ เช†เชณเชธเซ เชนเชคเซ‹, เชคเซ‡ เชคเซ‡เชจเชพ เชนเซ‡เชคเซเชจเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‡ เช›เซ‡ - เชฎเซ‹เชจเชฟเชŸเชฐ เช•เช‚เชˆเชชเชฃ เชฌเชคเชพเชตเชคเชพ เชจเชฅเซ€, เชญเชฒเซ‡ เชนเซเช‚ เชฌเชŸเชจเซ‹ เชฆเชฌเชพเชตเซเช‚, เชฎเชพเช‰เชธ เช–เชธเซ‡เชกเซเช‚, เชตเช—เซ‡เชฐเซ‡.

เชฏเซเชชเซ€เชกเซ€:

ะกะฟะฐัะธะฑะพ เช…เชฎเชพเชฐเชพเชต เชคเซ‡เชœเชจเซ‡ เชถเซ‚เชจเซเชฏเชฎเชพเช‚ เชซเซ‡เชฐเชตเชตเชพเชจเซ€ เชฌเซ€เชœเซ€ เชชเชฆเซเชงเชคเชฟ เชฎเชพเชŸเซ‡:

$ 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

เช…เช•เซเชทเชฎ_เชธเซเชฅเชพเชจเชฟเช•_เช•เชจเซเชธเซ‹เชฒ:

#!/bin/sh

trap "switch_local_console 1" EXIT

while :
do
    switch_local_console 0
    sleep 1
done

เช–เชฐเซ‡เช–เชฐ, เชฎเซเช–เซเชฏ เชธเซเช•เซเชฐเชฟเชชเซเชŸ (เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฌเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช›เซ‡, เชฎเซ‡เช‚ เชฆเชฐเซ‡เช• เชฎเซ‹เชจเชฟเชŸเชฐ เชฎเชพเชŸเซ‡ เชเช• เชธเชพเชฎเชพเชจเซเชฏ เชธเชฐเซเชตเชฐ เช…เชจเซ‡ เชเช• เชธเซ‡เชŸเช…เชช เช•เชฐเซเชฏเซเช‚ เช›เซ‡).

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

เชฌเชธ เชเชŸเชฒเซเช‚ เชœ. ssh เชฆเซเชตเชพเชฐเชพ เชฒเซ‹เช—เชฟเชจ เช•เชฐเซ‹ เช…เชจเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเซ‹ vnc_server, เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชœเซ€เชตเชคเซ‹ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ vnc เชฆเซเชตเชพเชฐเชพ เชเช•เซเชธเซ‡เชธ เชนเซ‹เชฏ เช›เซ‡ เช…เชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เช•เชจเซเชธเซ‹เชฒ เชฌเซเชเชพเชˆ เชœเชพเชฏ เช›เซ‡.

เชคเชฎเชพเชฐเชพ เชงเซเชฏเชพเชจ เชฌเชฆเชฒ เช†เชญเชพเชฐ, เช‰เชฎเซ‡เชฐเชพเช“ เช…เชจเซ‡ เชธเซเชงเชพเชฐเชพเช“ เช†เชตเช•เชพเชฐเซเชฏ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹