x11vnc istifadə edərkən yerli konsolu söndürün

Salam hər kəsə,

İnternetdə x11vnc vasitəsilə mövcud Xorg seansına uzaqdan bağlantının necə qurulması mövzusunda bir çox məqalə var, lakin mən heç bir yerdə yerli monitoru və girişi necə basdıracağımı tapmadım ki, uzaq kompüterin yanında oturan hər kəs bunu etsin. nə etdiyinizi görmür və seansda düymələri basmır. Aşağıda x11vnc-ni RDP vasitəsilə Windows-a qoşulmağa bənzətmək üçün mənim metodum var.

Beləliklə, deyək ki, siz artıq x11vnc-dən necə istifadə edəcəyinizi bilirsiniz, əgər yoxsa, məsələn, google-da və ya oxuya bilərsiniz burada.

Verilənlər: x11nvc-ni işə salırıq, ona müştəri ilə qoşuluruq, hər şey işləyir, lakin kompüterin yerli konsolu da baxmaq və daxil etmək üçün mövcuddur.

Biz istəyirik: yerli konsolu (monitor + klaviatura + siçan) söndürün ki, heç bir şey görünməsin və ya daxil olmasın.

Monitorların söndürülməsi

Ağlıma gələn ilk şey sadəcə xrandr vasitəsilə monitoru söndürmək oldu, məsələn:

$ xrandr --output CRT1 --off

lakin eyni zamanda, pəncərə mühiti (məndə KDE var) monitorun həqiqətən söndürüldüyünü düşünməyə başlayır və pəncərələri və panelləri atmağa başlayır, hər şey yerindən tərpənir və kədərlənir.
Monitoru qışlama rejiminə göndərməyin daha maraqlı bir yolu var, məsələn, bunu belə edə bilərsiniz:

$ xset dpms force off

amma burada da hər şey rəvan deyil. Sistem ilk hadisədə monitoru oyandırır. Dövr şəklində ən sadə qoltuqağacı kömək edir:

while :
do
    xset dpms force off
    sleep .5
done

Daha çox düşünmədim - tənbəl idim, öz məqsədinə xidmət edir - düymələri bassam da, siçanı hərəkət etdirsəm də və s. monitorlar heç nə göstərmir.

UPS:

Təşəkkür amarao parlaqlığı sıfıra çevirməklə başqa bir üsul üçün:

$ xrandr --output CRT1 --brightness 0

Girişin kəsilməsi

Daxiletməni söndürmək üçün xinput istifadə etdim. Parametrlər olmadan işə salındıqda, cihazların siyahısını göstərir:

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

Cihazlar Virtual nüvə... onu söndürə bilməzsiniz - bir səhv göstərilir, lakin qalanları yandırıla və söndürülə bilər, məsələn, bir dəqiqə siçansız qala bilərsiniz:

xinput disable 9; sleep 60; xinput enable 9

Anahtar teslimi həll

Mənim vəziyyətim üçün ssh sessiyasında işlədiyim bir skript hazırladım. O, yerli girişi sıxışdırır və x11vnc serverini qaldırır və skript tamamlandıqdan sonra hər şey olduğu kimi geri qayıdır. Nəticədə üç skript əldə etdik, onlar burada (yeniləndi).

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

Əslində, əsas skript (iki monitorum var, hər bir monitor üçün bir ümumi server və bir də qurdum).

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

Hamısı budur. Ssh vasitəsilə daxil olun və işə salın vnc_server, o sağ ikən vnc vasitəsilə çıxışımız var və yerli konsol söndürülüb.

Diqqətiniz üçün təşəkkür edirik, əlavələr və təkmilləşdirmələr xoşdur.

Mənbə: www.habr.com

Добавить комментарий