如何使用x11vnc制作单窗口VNC会话?

5
我想创建一个VNC会话,以公开我在虚拟显示器上启动的单个应用程序。我希望使用x11vnc来实现这一点,因为这样我可以通过noVNC进行公开。
问题在于x11vnc只允许我创建虚拟显示器:
x11vnc -create

...或者是打开已经启动应用程序的单一窗口

x11vnc -id 0x200002

但是我没有找到任何选项来在新的虚拟显示器中启动新的应用程序(就像vncserver的xstartup一样)。

4个回答

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

感谢您在办公室分享Windows操作系统!

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

或者更短的:

x11vnc -id pick -viewonly -forever

好的解决方案,但它是交互式的。我使用批处理模式下的VNC服务器从服务器节点运行交互式/图形应用程序(无需实际显示)。 - Michael Dussere
是的,我的例子是为了互动而设计的 :D - Patrik
以下命令可以复制相同的功能:x11vnc -id pick -viewonly -forever - bougui

1

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

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

所以你要获取树,筛选你要查找的程序,获取最后一个选项,去掉尾随空格,然后只获取第一列,并保存它。然后你可以运行...

x11vnc -id $window_id &

我希望你能够达到与Michael的答案类似的效果。希望如此。就像我说的那样,这是一个hack。


0

x11vnc支持基于窗口ID共享窗口。在这里,您可以将模拟器视为窗口并共享它。

以下是步骤:

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

示例命令:

 x11vnc -id 0x2800005

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接