如果将SSH本地登录到我的计算机中(不要问,这是一种解决方法),则无法运行以下图形应用程序:首先运行图形应用程序,然后一切正常。如果不行,那就行不通了,没有显示器要附加。

是否存在用于列出计算机上所有可用显示(即:所有可能的值)的命令?

评论

从终端启动应用程序的一种更干净的方法是(DISPLAY =:0 yourapp&)。

要从命令行脚本获取该显示号,请尝试w。更多信息:列出现有的X显示名称?

“当将SSH本地登录到我的计算机中时(不要问,这是一种解决方法)” ...让我咯咯地笑

#1 楼

如果希望X连接通过SSH转发,则需要在服务器端和客户端都启用它。 (取决于分布,默认情况下可能会启用或禁用它。)在服务器端,请确保X11Forwarding yes(或/etc/sshd_config或任何配置文件所在的位置)中有/etc/ssh/sshd_config。在客户端,将-X选项传递给ssh命令,或将ForwardX11放入~/.ssh/config中。

如果运行ssh -X localhost,应该看到$DISPLAY是(可能)localhost:10.0。与:0.0相比,.0是未通过SSH连接时的值。 (:部分可以省略;它是一个屏幕编号,但是很少使用多个屏幕。)您可能会遇到两种X显示屏形式:


Local显示器,在:之前没有任何内容。
TCP显示器,在ssh -X localhost之前带有主机名。方法::NUMBER通过本地套接字和共享内存访问服务器,而HOSTNAME:NUMBER通过TCP访问服务器,这比较慢并且会禁用某些扩展。

请注意,您需要一种授权形式才能访问X服务器。 ,称为Cookie,通常存储在文件~/.Xauthority中。如果您使用ssh来访问其他用户帐户,或者您的发行版将cookie放在另一个文件中,则可能会发现DISPLAY=:0在SSH会话中不起作用(但是ssh -X在服务器中启用了;您无需在执行XAUTHORITY时弄乱ssh -X)。如果存在问题,则需要设置XAUTHORITY环境变量或获取其他用户的cookie。

要回答您的实际问题:




本地显示对应于/tmp/.X11-unix中的插槽。

(cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)



远程显示对应于6000以上的打开的TCP端口。通过连接到机器M上的TCP端口6000 + N,来访问机器M上的显示编号N。从机器M本身:

仅在学术上有意义。)

从另一台计算机上,您可以使用nmap -p 6000-6099 host_name来探测通常范围内的打开的TCP端口。如今,很少有X服务器在TCP套接字上侦听,尤其是在回送接口之外。

严格来说,另一个应用程序可能正在使用X服务器通常使用的范围内的端口。您可以通过检查哪个程序打开了端口来判断X服务器是否正在侦听。无论是X服务器还是巧合。



#2 楼

显示是Xorg的第一个参数。您可以先ps然后grep Xorg

[braga@coleman teste_geom]$ ps aux | grep Xorg
root      1584  5.3  1.0 156628 41708 tty1     Rs+  Jul22  22:56 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-a3kSKB/database -nolisten tcp vt1
braga     9110  0.0  0.0 109104   804 pts/1    S+   00:26   0:00 grep --color=auto Xorg


然后您可以将awk转换成所需的格式。

评论


这不会检测到由Xorg以外的服务器创建的显示,例如Xvnc。

– cjm
2011年7月23日下午6:37

ps aux | grep X对我来说更好

– nobar
2012年2月1日0:00,

w显示登录的每个人及其显示。

–全脑弗兰克利
2015年11月3日在16:48

请注意,Xorg的参数是(至少现在是2016年)是可选的,并且(至少在Fedora上)通常不存在,因此该方法不再有效。

– BRPocock
16年8月29日在16:14

如果出于某种原因,只是设置环境var不能总是起作用...请尝试将其添加到命令DISPLAY =:0 netsurf“ https://medium.com/” ...或使用export DISPLAY =:0进行共享带有过程的var,而不仅仅是shell

– Ray Foss
19 Mar 7 '19 at 21:51



#3 楼

# Show all active login shells, with displays
$ w -oush

trunc-us tty1                      23:02  -bash
trunc-us tty7     :0                4days /sbin/upstart --user
trunc-us pts/4    :0                      w -oush

# Capture the Display part
$ w -oush | grep -Eo ' :[0-9]+'

 :0
 :0

# only unique lines
$ w -oush | grep -Eo ' :[0-9]+' | uniq

 :0

# trim off the leading space
$ w -oush | grep -Eo ' :[0-9]+' | uniq | cut -d \  -f 2


[编辑:我运行了一个Xnest实例,看是否可以捕获它-不能;它仅捕获登录shell(“ w”是“​​ who”的缩写)。回到我的画板。]
[编辑:找到它:

$ ls /tmp/.X11-unix

X0 X2

$ ls /tmp/.X11-unix | tr 'X' ':'
:0
:2


]

评论


真奇怪,我想知道那里的解释是什么。

–福特
16年6月17日在5:02



(关于我在显示器1024上运行的GDM)我无法第二次复制它。当时我正在尝试xrdp,窗口化X11转发和一些VNC客户端。似乎在典型安装中,如果您在锁定屏幕上点击了“以其他用户身份登录”按钮,则GDM将在X0 ...或X1上运行。您的第二种方法在Fedora 23上对我有用

– Ray Foss
16年6月21日在12:41

我使用您的命令在Display 1024上找到了一些东西,但是在那儿什么也没运行...使用ps xeww | grep DISPLAY =:1024现在很奇怪。我也在20号显示器上运行chrome-remote-desktop。

– Ray Foss
16年9月2日在15:16

如果x服务器上没有运行任何应用程序(包括没有窗口管理器和桌面),w将不起作用。但是ls /tmp/.X11-unix确实可以工作。

– 12431234123412341234123
18/12/21在17:53

#4 楼

ps e | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u


将列出所有当前的DISPLAY,从而完成这项工作。您还可以通过以下方式查看为特定用户($ usr)分配的显示:

ps e -u $usr | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u


评论


那第二个是ps e -u $ USER | grep -Po“ DISPLAY = [\。0-9A-Za-z:] *” |排序-u?

– Alexx Roche
18年4月11日在12:26

#5 楼

/tmp文件夹中,也可以有.X??-lock文件,其中??指示会话号。

如果要重新使用会话号,则需要删除这些文件。可以使用ls -a看到它们,因为通常隐藏以.开头的文件。

评论


这些是展示会议吗?

–phk
16年7月3日在10:58