ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ,
Π² Π±Π΅Π·ΠΊΡΠ°ΠΉΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΡΠΎΡΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΠΈ Π½Π° ΡΠ΅ΠΌΠ° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° ΡΠ΅ΡΠΈΡ Xorg ΡΡΠ΅Π· x11vnc, Π½ΠΎ Π½ΠΈΠΊΡΠ΄Π΅ Π½Π΅ Π½Π°ΠΌΠ΅ΡΠΈΡ
ΠΊΠ°ΠΊ Π΄Π° Π·Π°Π±ΡΠ°Π½ΠΈΠΌ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ Π²Ρ
ΠΎΠ΄Π°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π²ΡΠ΅ΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π΄ΠΈ Π΄ΠΎ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ, Π΄Π° Π½Π΅ Π²ΠΈΠΆΠ΄Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΈ Π΄Π° Π½Π΅ Π½Π°ΡΠΈΡΠΊΠ° Π±ΡΡΠΎΠ½ΡΠ΅ΡΠ° Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° ΡΠ΅ΡΠΈΡ. ΠΠΎ-Π΄ΠΎΠ»Ρ ΡΠΏΠΎΠ΄Π΅Π»ΡΠΌ ΠΌΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ x11vnc ΠΏΠΎ-ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ Windows ΡΡΠ΅Π· RDP.
Π ΡΠ°ΠΊΠ°, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌ, ΡΠ΅ Π²Π΅ΡΠ΅ ΡΠΌΠ΅Π΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ x11vnc, Π°ΠΊΠΎ Π½Π΅ β ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΡΡΠΈΡΠ΅ Π² Google ΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ .
ΠΠ°Π΄Π΅Π½ΠΎ: ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ x11vnc, ΡΠ²ΡΡΠ·Π²Π°ΠΌΠ΅ ΡΠ΅ Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ, Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ, Π½ΠΎ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ° ΡΡΡΠΎ Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ ΠΈ Π²Ρ ΠΎΠ΄.
ΠΡΠΊΠ°ΠΌΠ΅: Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° (ΠΌΠΎΠ½ΠΈΡΠΎΡ + ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° + ΠΌΠΈΡΠΊΠ°), ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΠΈΡΠΎ Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ ΠΈ Π²ΡΠ²Π΅Π΄Π΅.
ΠΠ·ΠΊΠ»ΡΡΠ²Π°ΠΌΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΠ΅
ΠΡΡΠ²ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΈ Π΄ΠΎΠΉΠ΄Π΅ Π½Π° ΡΠΌΠ°, Π±Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΡΡΠ΅Π· xrandr, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ°:
$ xrandr --output CRT1 --off Π½ΠΎ ΠΏΡΠΈ ΡΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄Π° (ΠΏΡΠΈ ΠΌΠ΅Π½ KDE) Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΠΌΠΈΡΠ»ΠΈ, ΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΡΡ Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ ΠΈ Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π° ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΠΈ ΠΏΠ°Π½Π΅Π»ΡΠ΅ΡΠ°, Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡΠ²Π° ΠΈ ΡΡΠ°Π²Π° ΡΡΠΆΠ½ΠΎ.
ΠΠΌΠ° ΠΏΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ Π² ΡΠΎΠ²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Π² ΡΡΠ½, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ°:
$ xset dpms force offΠ½ΠΎ ΡΡΠΊ ΡΡΡΠΎ Π½Π΅ Π΅ Π²ΡΠΈΡΠΊΠΎ Π³Π»Π°Π΄ΠΊΠΎ. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΡΠ±ΡΠΆΠ΄Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΠΏΡΠΈ ΠΏΡΡΠ²ΠΎΡΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅. ΠΠΎΠΌΠ°Π³Π° ΠΏΡΠΎΡΡΠΈΡΡΠΊ ΡΡΠΈΠΊ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠΈΠΊΡΠ»:
while :
do
xset dpms force off
sleep .5
doneΠ‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π½Π΅ ΡΠ΅ Π·Π°ΠΌΠΈΡΠ»ΡΡ β ΠΏΡΠΎΡΡΠΎ Π±Π΅ΡΠ΅ ΠΌΡΡΠ·Π΅Π», ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ΅Π»ΡΠ° ΡΠΈ β ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΠ΅ Π½ΠΈΡΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ, Π΄ΠΎΡΠΈ ΠΏΡΠΈ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ Π½Π° Π±ΡΡΠΎΠ½ΠΈ, ΠΌΡΡΠ΄Π°Π½Π΅ Ρ ΠΌΠΈΡΠΊΠ°ΡΠ° ΠΈ Ρ.Π½.
UPD:
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π·Π° ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ Ρ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠΊΠΎΡΡΡΠ° Π΄ΠΎ Π½ΡΠ»Π°:
$ 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)]Π£ΡΡΡΠΎΠΉΡΡΠ²Π° Virtual coreβ¦ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΎ β ΠΏΠΎΠΊΠ°Π·Π²Π° Π³ΡΠ΅ΡΠΊΠ°, Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Ρ; Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΡΠ°Π½Π΅ΡΠ΅ Π±Π΅Π· ΠΌΠΈΡΠΊΠ° Π·Π° ΠΌΠΈΠ½ΡΡΠ°:
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_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 ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ, Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ° Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎΡΠ»ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
