αž”αž·αž‘αž€αž»αž„αžŸαžΌαž›αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ x11vnc

αž‡αŸ†αžšαžΆαž”αžŸαž½αžšβ€‹αž’αŸ’αž“αž€β€‹αžšαžΆαž›αŸ‹β€‹αž‚αŸ’αž“αžΆ,

αž˜αžΆαž“αž’αžαŸ’αžαž”αž‘αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸ…αž›αžΎαž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžαŸ†αž‘αžΎαž„αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž–αžΈαž…αž˜αŸ’αž„αžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹αžŸαž˜αŸαž™ Xorg αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αžšαž™αŸˆ x11vnc αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžšαž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€ αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€αžŽαžΆαžŠαŸ‚αž›αž’αž„αŸ’αž‚αž»αž™αž€αŸ’αž”αŸ‚αžšαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž–αžΈαž…αž˜αŸ’αž„αžΆαž™αž’αŸ’αžœαžΎ αž˜αž·αž“αžƒαžΎαž‰αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎ αž“αž·αž„αž˜αž·αž“αž”αžΆαž“αž…αž»αž…αž”αŸŠαžΌαžαž»αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž‚αŸ’αž‚αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž€αžΆαžαŸ‹αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™ x11vnc αžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… Windows αžαžΆαž˜αžšαž™αŸˆ RDP αŸ”

αž’αž‰αŸ’αž…αžΉαž„αž§αž”αž˜αžΆαžαžΆαž’αŸ’αž“αž€αž…αŸαŸ‡αž”αŸ’αžšαžΎ x11vnc αžšαž½αž…αž αžΎαž™ αž”αžΎαž’αžαŸ‹αž‘αŸ αž’αŸ’αž“αž€αž’αžΆαž… google αž¬αž’αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸ αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αŸ– αž™αžΎαž„αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš x11nvc αž—αŸ’αž‡αžΆαž”αŸ‹αžœαžΆαž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αž»αž„αžŸαžΌαž›αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€αžšαž”αžŸαŸ‹αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž€αŸαž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αžΎαž› αž“αž·αž„αž”αž‰αŸ’αž…αžΌαž›αž•αž„αžŠαŸ‚αžšαŸ”

αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“αŸ– αž”αž·αž‘αž€αž»αž„αžŸαžΌαž›αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ (αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš + αž€αŸ’αžαžΆαžšαž…αž»αž… + αž€αžŽαŸ’αžŠαž»αžš) αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž·αž“αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰ αž¬αž…αžΌαž›αž”αžΆαž“αž‘αŸαŸ”

αž€αžΆαžšαž”αž·αž‘αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžš

αžšαžΏαž„αžŠαŸ†αž”αžΌαž„αžŠαŸ‚αž›αž‚αž·αžαž‚αžΊαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž·αž‘αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžšαžαžΆαž˜αžšαž™αŸˆ xrandr αž§αž‘αžΆαž αžšαžŽαŸαžŠαžΌαž…αž“αŸαŸ‡αŸ–

$ xrandr --output CRT1 --off

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸ„αŸ‡ αž”αžšαž·αž™αžΆαž€αžΆαžŸαž”αž„αŸ’αž’αž½αž… (αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“ 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

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ Turnkey

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αžœαž‚αŸ’αž‚ 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_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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹