使用x11vnc时禁用本地控制台

大家好

在Internet上,有很多关于如何通过x11vnc配置到现有Xorg会话的远程连接的文章,但是我还没有找到如何固定本地监视器和输入的信息,因此坐在远程计算机旁边的任何人都不会看到您在做什么,而不会在您的会话中按下按钮。 在cat下,我使x11vnc的方式更像是通过RDP连接到Windows。

因此,假设您已经知道如何使用x11vnc,如果没有,您可以在Google或此处阅读例如。

鉴于:启动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)] 

虚拟核心设备...无法关闭-会发出错误,但可以打开和关闭其余的设备,例如,像这样,您可以不用鼠标停留一分钟:

 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进行访问并且本地控制台已熄灭。

感谢您的关注,我们欢迎您进行补充和改进。

Source: https://habr.com/ru/post/zh-CN469885/


All Articles