Pateni konsol lokal nalika nggunakake x11vnc

Halo,

Ana akeh artikel ing Internet babagan topik carane nyiyapake sambungan remot menyang sesi Xorg sing ana liwat x11vnc, nanging aku ora nemokake ing ngendi wae carane nyuda monitor lan input lokal supaya sapa wae sing lungguh ing jejere komputer remot. ora weruh apa sing sampeyan lakoni lan ora menet tombol ing sesi sampeyan. Ing ngisor iki potong minangka cara kanggo nggawe x11vnc luwih mirip karo nyambungake menyang Windows liwat RDP.

Dadi, yen sampeyan wis ngerti carane nggunakake x11vnc, yen ora, sampeyan bisa google utawa maca contone. kene.

Given: kita miwiti x11nvc, nyambung karo klien, kabeh bisa, nanging console lokal komputer uga kasedhiya kanggo ndeleng lan input.

Kita pengin: mateni konsol lokal (monitor + keyboard + mouse) supaya ora ana sing katon utawa mlebu.

Mateni monitor

Bab pisanan sing dipikirake yaiku mateni monitor liwat xrandr, contone kaya iki:

$ xrandr --output CRT1 --off

nanging ing wektu sing padha, lingkungan windowing (Aku duwe KDE) wiwit mikir sing monitor tenan dipateni lan wiwit uncalan windows lan panel, kabeh gerakane metu lan dadi sedih.
Ana cara sing luwih menarik, yaiku ngirim monitor menyang hibernasi, sampeyan bisa nindakake kaya iki:

$ xset dpms force off

nanging kene, banget, ora kabeh Gamelan. Sistem tangi monitor ing acara pisanan. Kruk sing paling gampang ing wangun siklus mbantu:

while :
do
    xset dpms force off
    sleep .5
done

Aku ora mikir maneh - aku kesed, iku serves kanggo tujuane - monitor ora nuduhake apa-apa, sanajan aku mencet tombol, mindhah mouse, etc.

UPD:

Бпасибо amarao kanggo cara liya kanthi ngowahi padhange dadi nol:

$ xrandr --output CRT1 --brightness 0

Ngilangi input

Kanggo mateni input aku digunakake xinput. Nalika diluncurake tanpa paramèter, bakal nampilake dhaptar piranti:

$ 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)]

Piranti Inti virtual... sampeyan ora bisa mateni - kesalahan ditampilake, nanging liyane bisa diuripake lan mateni, contone, iki carane sampeyan bisa ngiwa tanpa mouse sak menit:

xinput disable 9; sleep 60; xinput enable 9

Solusi siap

Kanggo kasusku, aku nggawe skrip sing ditindakake ing sesi ssh. Iku suppresses input lokal lan mundhakaken server x11vnc, lan marang completion saka script kabeh bali kaya. AkibatΓ©, kita entuk telung skrip, ing kene (dianyari).

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

Bener, script utama (Aku duwe loro monitor, aku nyiyapake siji server umum lan siji kanggo saben monitor).

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

Mekaten. Mlebet liwat ssh lan miwiti vnc_server, nalika isih urip, kita duwe akses liwat vnc lan console lokal dipateni.

Matur nuwun kanggo kawigatosan, tambahan lan dandan olèh.

Source: www.habr.com

Add a comment