ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ,
ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΠΎ ΡΠ΅ΠΌΠ°ΡΠ° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π° Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° Xorg ΡΠ΅ΡΠΈΡ ΡΡΠ΅Π· x11vnc, Π½ΠΎ Π½Π΅ Π½Π°ΠΌΠ΅ΡΠΈΡ
Π½ΠΈΠΊΡΠ΄Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΡΠΈΡΠ½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π΄ΠΈ Π΄ΠΎ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ, Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½Π΅ Π²ΠΈΠΆΠ΄Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΈ Π½Π΅ Π½Π°ΡΠΈΡΠΊΠ° Π±ΡΡΠΎΠ½ΠΈ Π² ΡΠ΅ΡΠΈΡΡΠ° Π²ΠΈ. ΠΠΎ-Π΄ΠΎΠ»Ρ Π΅ ΠΌΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΏΡΠ°Π²Π΅Π½Π΅ Π½Π° x11vnc ΠΏΠΎ-ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ Windows ΡΡΠ΅Π· RDP.
Π’Π°ΠΊΠ° ΡΠ΅, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ Π²Π΅ΡΠ΅ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ x11vnc, Π°ΠΊΠΎ Π½Π΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΡΡΠΈΡΠ΅ Π² Google ΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠ°ΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄: ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ x11nvc, ΡΠ²ΡΡΠ·Π²Π°ΠΌΠ΅ ΡΠ΅ Ρ Π½Π΅Π³ΠΎ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ, Π½ΠΎ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ° ΡΡΡΠΎ Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ ΠΈ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅.
ΠΠΈΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅: ΠΈΠ·ΠΊΠ»ΡΡΠ΅ΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° (ΠΌΠΎΠ½ΠΈΡΠΎΡ + ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° + ΠΌΠΈΡΠΊΠ°), ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΠΈΡΠΎ Π΄Π° Π½Π΅ ΡΠ΅ Π²ΠΈΠΆΠ΄Π° ΠΈΠ»ΠΈ Π²ΡΠ²Π΅ΠΆΠ΄Π°.
ΠΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΠ΅
ΠΡΡΠ²ΠΎΡΠΎ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΈ Π΄ΠΎΠΉΠ΄Π΅ Π½Π° ΡΠΌ, Π±Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΡΡΠ΅Π· xrandr, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ°:
$ xrandr --output CRT1 --off
Π½ΠΎ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄Π° (ΠΈΠΌΠ°ΠΌ KDE) Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΠΌΠΈΡΠ»ΠΈ, ΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΡΡ Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ ΠΈ Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° Ρ
Π²ΡΡΠ»Ρ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ, Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΡΠ²Π° ΠΈ ΡΡΠ°Π²Π° ΡΡΠΆΠ½ΠΎ.
ΠΠΌΠ° ΠΏΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½, ΠΊΠΎΠΉΡΠΎ Π΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Π² Ρ
ΠΈΠ±Π΅ΡΠ½Π°ΡΠΈΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π° Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ°:
$ 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
ΠΡΡΡΠ½ΠΎΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΡΠΊΡΠΈΠΏΡ (ΠΈΠΌΠ°ΠΌ Π΄Π²Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°, Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΠΌ Π΅Π΄ΠΈΠ½ ΠΎΠ±Ρ ΡΡΡΠ²ΡΡ ΠΈ ΠΏΠΎ Π΅Π΄ΠΈΠ½ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡ).
vnc_ΡΡΡΠ²ΡΡ:
#!/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_ΡΡΡΠ²ΡΡ, Π΄ΠΎΠΊΠ°ΡΠΎ Π΅ ΠΆΠΈΠ² ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡΡΠΏ ΠΏΡΠ΅Π· vnc ΠΈ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° Π΅ ΡΠ³Π°ΡΠ΅Π½Π°.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π²ΠΈ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ, Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΡΡΠ° ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° ΡΠ° Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎΡΠ»ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com