如何使用x11vnc建立单窗口vnc会话?

问题描述 投票:0回答:5

我想创建一个 VNC 会话来公开我在虚拟显示器上启动的单个应用程序。我想用 x11vnc 来做,因为之后我可以通过 noVNC 公开它。

问题是 x11vnc 允许我创建虚拟显示器:

x11vnc -create

...或公开已启动应用程序的单个窗口

x11vnc -id 0x200002

但我没有找到任何在新虚拟显示器中启动新应用程序的选项(例如 vncserver 的 xstartup)。

vnc
5个回答
6
投票

到目前为止,我找到的唯一解决方案是手动完成所有程序

# create a virtual display on the compute node
Xvnc :33 &

# launch the application on this virtual display
export DISPLAY=:33
glxgears &

# find out its window id
xwininfo -root -children

# -> xwininfo: Window id: 0xdc (the root window) (has no name)
#
#  Root window id: 0xdc (the root window) (has no name)
#  Parent window id: 0x0 (none)
#     1 child:
#     0x200002 "glxgears": ()  300x300+0+0  +0+0

# start the vnc server with this specifix xid
x11vnc -id 0x200002 &

它可以工作,但有点复杂,我仍然需要编写一个小命令来自动获取 xid。


1
投票

我没有足够的“声誉”来写评论,所以我必须写自己的答案,尽管这只是对迈克尔答案的修改,老实说我还没有测试。我想出了一个快速的方法来获取窗口 ID,因为我无法手动输入它。试试这个来找出窗口 ID:

window_id=$(xwininfo -root -tree | grep glxgears | tail -n1 | sed "s/^[ \t]*//" | cut -d ' ' -f1)

因此,您将获取树,过滤您要查找的程序,获取最后一个选项,删除尾随空格,然后仅获取第一列并保存它。然后你就可以跑了...

x11vnc -id $window_id &

...与迈克尔的回答具有相同的效果。希望。就像我说的,这是一个黑客。


1
投票

非常适合在办公室共享窗口!

echo "Select Window...";x11vnc -id $(xwininfo|grep -oP '(?<=id: ).*(?= ")') -viewonly -forever

或更短的:

x11vnc -id pick -viewonly -forever

0
投票

x11vnc 支持根据 id 共享窗口。在这里您可以将模拟器作为窗口并分享。

以下是步骤:

  • 从终端运行
    xwininfo
    。单击您想要的窗口 分享。
    xwininfo
    将打印出窗口 ID。
  • 运行 `x11vnc -id win_id 从上述步骤中获取 win_id。

命令示例:

 x11vnc -id 0x2800005

0
投票

如果您始终知道窗口的名称(更适合编写脚本),则可以删除一些步骤,只需使用 xwininfo 按名称获取窗口,然后使用 grep 从第一行中过滤出窗口 ID:

x11vnc --forever -id $(xwininfo -name "window_title" | grep -Po "0x\d{7}" -m1)
© www.soinside.com 2019 - 2024. All rights reserved.