ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ консоль ΠΏΡ€ΠΈ использовании x11vnc

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚,

Π½Π° просторах ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ статСй Π½Π° Ρ‚Π΅ΠΌΡƒ ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ сСссии Xorg Ρ‡Π΅Ρ€Π΅Π· x11vnc, Π½ΠΎ я Π½ΠΈΠ³Π΄Π΅ Π½Π΅ нашСл, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΈΠ΄Π°Π²ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΈ Π²Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ любой, ΠΊΡ‚ΠΎ сидит рядом с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠΌ, Π½Π΅ смотрСл Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΈ Π½Π΅ Π½Π°ΠΆΠΈΠΌΠ°Π» ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠΈ Π² вашСй сСссии. Под ΠΊΠ°Ρ‚ΠΎΠΌ ΠΌΠΎΠΉ способ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ x11vnc Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π²ΠΈΠ½Π΄Π΅ ΠΏΠΎ RDP.

Π˜Ρ‚Π°ΠΊ, допустим, Π²Ρ‹ ΡƒΠΆΠ΅ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ x11vnc, Ссли Π½Π΅Ρ‚ β€” ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ³ΡƒΠ³Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΡƒΡ‚.

Π”Π°Π½ΠΎ: запускаСм x11nvc, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ локальная консоль ΠΊΠΎΠΌΠΏΠ° Ρ‚ΠΎΠΆΠ΅ доступна для просмотра ΠΈ Π²Π²ΠΎΠ΄Π°.

Π₯ΠΎΡ‚ΠΈΠΌ: Π²Ρ‹Ρ€ΡƒΠ±ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ консоль (ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ + ΠΊΠ»Π°Π²Π° + ΠΌΡ‹ΡˆΠΊΠ°) Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ нСльзя Π±Ρ‹Π»ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈ ввСсти.

Π’Ρ‹Ρ€ΡƒΠ±Π°Π΅ΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ, Π±Ρ‹Π»ΠΎ просто ΠΎΡ‚Ρ€ΡƒΠ±ΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Ρ‡Π΅Ρ€Π΅Π· xrandr Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:

$ xrandr --output CRT1 --off

Π½ΠΎ ΠΏΡ€ΠΈ этом оконная срСда (Ρƒ мСня KDE) Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½Π° ΠΈ панСльки, всС ΡΡŠΠ΅Π·ΠΆΠ°Π΅Ρ‚ ΠΈ становится грустно.
Π•ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ интСрСсный способ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π² спячку, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:

$ xset dpms force off

Π½ΠΎ Ρ‚ΡƒΡ‚ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ всС Π³Π»Π°Π΄ΠΊΠΎ. БистСма Π±ΡƒΠ΄ΠΈΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΆΠ΅ событии. ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΊΠΎΡΡ‚Ρ‹Π»ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π°:

while :
do
    xset dpms force off
    sleep .5
done

Π”Π°Π»ΡŒΡˆΠ΅ я Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π΅ стал β€” Π±Ρ‹Π»ΠΎ лСнь, ΠΎΠ½ΠΎ выполняСт свою Ρ†Π΅Π»ΡŒ β€” ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Π΄Π°ΠΆΠ΅ Ссли Π΄Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΡˆΠ΅Ρ€ΡƒΠ΄ΠΈΡ‚ΡŒ ΠΌΡ‹ΡˆΠΊΠΎΠΉ ΠΈ Ρ‚.Π΄.

UPD:

Бпасибо amarao Π·Π° Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ с Π²Ρ‹ΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ноль яркости:

$ 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