เบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เบ„เบญเบ™เป‚เบŠเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เป€เบกเบทเปˆเบญเปƒเบŠเป‰ x11vnc

เบชเบฐเบšเบฒเบเบ”เบตเบ—เบธเบเบ„เบปเบ™,

เบกเบตเบซเบผเบฒเบเบšเบปเบ”เบ„เบงเบฒเบกเปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบเบฑเบšเบเบญเบ‡เบ›เบฐเบŠเบธเบก Xorg เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเป‚เบ”เบเบœเปˆเบฒเบ™ x11vnc, เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เบšเปˆเบญเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเบงเบดเบ—เบตเบเบฒเบ™เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบˆเปเบžเบฒเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบœเบนเป‰เบ—เบตเปˆเบ™เบฑเปˆเบ‡เบขเบนเปˆเบ‚เป‰เบฒเบ‡เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ. เบšเปเปˆเป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบเบปเบ”เบ›เบธเปˆเบกเบขเบนเปˆเปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบเบฒเบ™เบ•เบฑเบ”เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰ x11vnc เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ Windows เบœเปˆเบฒเบ™ RDP.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เปƒเบŠเป‰ x11vnc, เบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” google เบซเบผเบทเบญเปˆเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡. เบ—เบตเปˆเบ™เบตเป‰.

เบกเบญเบšเปƒเบซเป‰: เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบง x11nvc, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบกเบฑเบ™เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ, เปเบ•เปˆ console เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบเบฑเบ‡เบกเบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบšเบดเปˆเบ‡เปเบฅเบฐเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™: เบ›เบดเบ” console เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ (monitor + keyboard + mouse) เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบซเบผเบทเป€เบ‚เบปเป‰เบฒ.

เบเบฒเบ™เบ›เบดเบ”เบˆเปเบžเบฒเบš

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เปƒเบˆเปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ›เบดเบ”เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เบœเปˆเบฒเบ™ xrandr, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

$ xrandr --output CRT1 --off

เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก windowing (เบ‚เป‰เบญเบเบกเบต KDE) เป€เบฅเบตเปˆเบกเบ„เบดเบ”เบงเปˆเบฒเบˆเปเบžเบฒเบšเบ–เบทเบเบ›เบดเบ”เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ–เบดเป‰เบกเบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเปเบฅเบฐเปเบœเบ‡, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบเป‰เบฒเบเบญเบญเบเป„เบ›เปเบฅเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเป‚เบชเบเป€เบชเบปเป‰เบฒ.
เบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ, เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบˆเปเบžเบฒเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ hibernation, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

$ xset dpms force off

เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบเป‰เบฝเบ‡. เบฅเบฐเบšเบปเบšเบ›เบธเบเบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เบขเบนเปˆเปƒเบ™เป€เบซเบ”เบเบฒเบ™เบ—เปเบฒเบญเบดเบ”. เป„เบกเป‰เบ„เป‰เบญเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบงเบปเบ‡เบˆเบญเบ™เบŠเปˆเบงเบ:

while :
do
    xset dpms force off
    sleep .5
done

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ„เบดเบ”โ€‹เบ•เบทเปˆเบกโ€‹เบญเบตเบ - เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ‚เบตเป‰โ€‹เบ„เป‰เบฒเบ™โ€‹, เบกเบฑเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบˆเบธเบ”โ€‹เบ›เบฐโ€‹เบชเบปเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบกเบฑเบ™ - เบˆเปโ€‹เบžเบฒเบšโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบซเบเบฑเบ‡โ€‹, เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบเบปเบ”โ€‹เบ›เบธเปˆเบกโ€‹, เบเป‰เบฒเบโ€‹เบซเบ™เบนโ€‹, เปเบฅเบฐโ€‹เบญเบทเปˆเบ™เป†โ€‹.

UPS:

ะกะฟะฐัะธะฑะพ เบญเบฒเบกเบฒเป‚เบฃ เบชเปเบฒเบฅเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบญเบทเปˆเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบชเบนเบ™:

$ 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

เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง, script เบ•เบปเป‰เบ™เบ•เป (เบ‚เป‰เบญเบเบกเบตเบชเบญเบ‡เบˆเปเบžเบฒเบš, เบ‚เป‰เบญเบเบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบปเปˆเบงเป„เบ›เบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบˆเป).

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 เปเบฅเบฐ console เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบกเปˆเบ™ extinguished.

เบ‚เบญเบšเปƒเบˆเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบเบฒเบ™เป€เบžเบตเปˆเบกเปเบฅเบฐเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปเบกเปˆเบ™เบเบดเบ™เบ”เบตเบ•เป‰เบญเบ™เบฎเบฑเบš.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™