Nonaktifkan konsol lokal saat menggunakan x11vnc

Halo semua,

Ada banyak artikel di Internet tentang cara mengatur koneksi jarak jauh ke sesi Xorg yang ada melalui x11vnc, tetapi saya belum menemukan cara untuk menekan monitor dan input lokal sehingga siapa pun yang duduk di sebelah komputer jarak jauh dapat melakukannya. tidak melihat apa yang Anda lakukan dan tidak menekan tombol di sesi Anda. Di bawah ini adalah metode saya untuk membuat x11vnc lebih mirip dengan menghubungkan ke Windows melalui RDP.

Jadi misalkan anda sudah tahu cara menggunakan x11vnc, jika belum bisa googling atau baca misalnya di sini.

Diberikan: kami meluncurkan x11nvc, menyambungkannya dengan klien, semuanya berfungsi, tetapi konsol lokal komputer juga tersedia untuk dilihat dan dimasukkan.

Kami ingin: matikan konsol lokal (monitor + keyboard + mouse) agar tidak ada yang terlihat atau masuk.

Mematikan monitor

Hal pertama yang terlintas di benak saya adalah mematikan monitor lewat xrandr, contohnya seperti ini:

$ xrandr --output CRT1 --off

tetapi pada saat yang sama, lingkungan windowing (saya punya KDE) mulai berpikir bahwa monitor benar-benar dimatikan dan mulai membuang jendela dan panel, semuanya bergerak keluar dan menjadi sedih.
Ada cara yang lebih menarik yaitu dengan memasukkan monitor ke mode hibernasi, misalnya bisa seperti ini:

$ xset dpms force off

tapi di sini juga, tidak semuanya mulus. Sistem membangunkan monitor pada kejadian pertama. Kruk paling sederhana dalam bentuk siklus membantu:

while :
do
    xset dpms force off
    sleep .5
done

Saya tidak berpikir lebih jauh - saya malas, itu sesuai dengan tujuannya - monitor tidak menampilkan apa pun, bahkan jika saya menekan tombol, menggerakkan mouse, dll.

UPD:

Terima kasih amarao untuk metode lain dengan mengubah kecerahan ke nol:

$ xrandr --output CRT1 --brightness 0

Memotong masukan

Untuk menonaktifkan input saya menggunakan xinput. Saat diluncurkan tanpa parameter, ini akan menampilkan daftar perangkat:

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

Perangkat Inti maya... Anda tidak dapat menonaktifkannya - kesalahan ditampilkan, tetapi sisanya dapat diaktifkan dan dinonaktifkan, misalnya, beginilah cara Anda dibiarkan tanpa mouse selama satu menit:

xinput disable 9; sleep 60; xinput enable 9

Solusi turnkey

Untuk kasus saya, saya membuat skrip yang saya jalankan dalam sesi ssh. Ini menekan input lokal dan meningkatkan server x11vnc, dan setelah skrip selesai semuanya kembali seperti semula. Hasilnya, kami mendapat tiga skrip, ini dia (diperbarui).

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

nonaktifkan_konsol_lokal:

#!/bin/sh

trap "switch_local_console 1" EXIT

while :
do
    switch_local_console 0
    sleep 1
done

Sebenarnya, skrip utama (Saya punya dua monitor, saya menyiapkan satu server umum dan satu untuk setiap 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

Itu saja. Masuk melalui ssh dan luncurkan vnc_server, selagi dia masih hidup, kami memiliki akses melalui vnc dan konsol lokal padam.

Terima kasih atas perhatiannya, penambahan dan perbaikan dipersilakan.

Sumber: www.habr.com

Tambah komentar