x11vnc استعمال کرتے وقت مقامی کنسول کو غیر فعال کریں۔

خوش سب کو،

انٹرنیٹ پر اس موضوع پر بہت سارے مضامین موجود ہیں کہ x11vnc کے ذریعے موجودہ Xorg سیشن میں ریموٹ کنکشن کیسے ترتیب دیا جائے، لیکن مجھے کہیں نہیں ملا کہ مقامی مانیٹر اور ان پٹ کو کیسے دبایا جائے تاکہ ریموٹ کمپیوٹر کے ساتھ بیٹھا کوئی بھی شخص ایسا کرے۔ یہ نہیں دیکھتے کہ آپ کیا کر رہے ہیں اور اپنے سیشن میں بٹن نہیں دباتے ہیں۔ کٹ کے نیچے x11vnc کو RDP کے ذریعے ونڈوز سے منسلک کرنے کے لیے زیادہ مماثل بنانے کا میرا طریقہ ہے۔

تو، ہم کہتے ہیں کہ آپ کو پہلے ہی x11vnc استعمال کرنے کا طریقہ معلوم ہے، اگر نہیں، تو آپ گوگل کر سکتے ہیں یا مثال کے طور پر پڑھ سکتے ہیں یہاں.

دیئے گئے: ہم x11nvc لانچ کرتے ہیں، اسے کلائنٹ کے ساتھ جوڑتے ہیں، سب کچھ کام کرتا ہے، لیکن کمپیوٹر کا مقامی کنسول دیکھنے اور ان پٹ کے لیے بھی دستیاب ہے۔

ہم چاہتے ہیں: مقامی کنسول (مانیٹر + کی بورڈ + ماؤس) کو بند کردیں تاکہ کچھ بھی نظر یا داخل نہ ہوسکے۔

مانیٹر بند کرنا

پہلی چیز جو ذہن میں آئی وہ صرف xrandr کے ذریعے مانیٹر کو بند کرنا تھا، مثال کے طور پر اس طرح:

$ xrandr --output CRT1 --off

لیکن ایک ہی وقت میں، کھڑکیوں کا ماحول (میرے پاس کے ڈی ای ہے) یہ سوچنا شروع کر دیتا ہے کہ مانیٹر واقعی بند ہو گیا ہے اور کھڑکیوں اور پینلز کو پھینکنا شروع کر دیتا ہے، ہر چیز باہر نکل جاتی ہے اور اداس ہو جاتی ہے۔
ایک اور دلچسپ طریقہ ہے، جو مانیٹر کو ہائبرنیشن میں بھیجنا ہے، آپ یہ کر سکتے ہیں مثال کے طور پر اس طرح:

$ xset dpms force off

لیکن یہاں بھی، سب کچھ ہموار نہیں ہے۔ سسٹم پہلی تقریب میں مانیٹر کو جگاتا ہے۔ ایک سائیکل کی شکل میں سب سے آسان بیساکھی مدد کرتا ہے:

while :
do
    xset dpms force off
    sleep .5
done

میں نے مزید نہیں سوچا - میں سست تھا، یہ اپنے مقصد کو پورا کرتا ہے - مانیٹر کچھ نہیں دکھاتے، یہاں تک کہ اگر میں بٹن دباتا ہوں، ماؤس کو حرکت دیتا ہوں، وغیرہ۔

یوپیڈی:

شکریہ عماراؤ چمک کو صفر کرنے کے ساتھ ایک اور طریقہ کے لیے:

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

آلات ورچوئل کور... آپ اسے غیر فعال نہیں کر سکتے ہیں - ایک غلطی ظاہر ہوتی ہے، لیکن باقی کو آن اور آف کیا جا سکتا ہے، مثال کے طور پر، اس طرح آپ کو ایک منٹ کے لیے ماؤس کے بغیر چھوڑا جا سکتا ہے:

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

غیر فعال_لوکل_کنسول:

#!/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 کے ذریعے رسائی حاصل ہے اور مقامی کنسول بجھ گیا ہے۔

آپ کی توجہ کا شکریہ، اضافے اور بہتری کا خیرمقدم ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں