判斷使用的是 x11 還是 wayland

沙滩炒花蛤發表於2024-05-20
  • date: 2024-05-20

之前的判斷方式是執行命令 echo "$XDG_SESSION_TYPE" 來檢視環境變數的值,如果返回的是 wayland 則說明用的 wayland,如果返回的是 x11 說明用的 x11。

但是,如果返回的是 tty 則不能說明是哪個。例如透過 ssh 連線到使用 x11 的遠端主機,會返回 tty。

ps

如何判斷linux 顯示伺服器是xorg (x11) 還是wayland 2023-02-24 Tarzen中提出使用 ps -ef |grep x11 或者 ps -ef |grep wayland 來查詢相關程序,但是實測存在問題,如下所示,第一行顯示用的是 x11,但是後面查詢相關程序時,卻沒有找到 x11 或 wayland 相關程序。

$ echo $XDG_SESSION_TYPE
x11
$ ps -ef | grep wayland
mifen     277467  252819  0 15:26 pts/0    00:00:00 grep wayland
$ ps -ef | grep x11
mifen     277475  252819  0 15:26 pts/0    00:00:00 grep x11
$ ps -ef | grep *x11*
mifen     277903  252819  0 15:36 pts/0    00:00:00 grep *x11*
$ ps -ef | grep *wayland*
mifen     277906  252819  0 15:36 pts/0    00:00:00 grep *wayland*

按理說這個方法是管用的,然後我手打發現好像不用加短線,然後這個方法就正常了,用 ssh 時也是能夠判斷用的是 x11 還是 wayland,有個缺陷就是輸出有點長,在下面裡用 LONG_LONG 替代了很多字元,於是想著可以用 wc -l 來統計輸出的行數,下面例子的最後兩行就是

$ ps ef | grep x11
 278341 pts/3    Ss     0:00 bash SSH_AUTH_SOCK LONG_LONG XDG_SEAT=seat0
 278349 pts/3    R+     0:00  \_ ps ef SHELL=/bin/bash LONG_LONG _=/usr/bin/ps
 278350 pts/3    S+     0:00  \_ grep x11 SHELL=/bin/bash LONG_LONG _=/usr/bin/grep
 277868 pts/1    Ss+    0:00 bash SSH_AUTH_SOCK LONG_LONG XDG_SEAT=seat0
 252819 pts/0    Ss+    0:00 bash SSH_AUTH_SOCK LONG_LONG XDG_SEAT=seat0

$ ps ef | grep wayland
 278353 pts/3    S+     0:00  \_ grep wayland SHELL=/bin/bash LONG_LONG _=/usr/bin/grep

$ ps ef | grep x11 | wc -l
5
$ ps ef | grep wayland | wc -l
1

loginctl

如何檢查: 是 Xorg 還是 Wayland 顯示伺服器?作者: Arindam 譯者: LCTT geekpi | 2022-11-05 中提出使用 loginctl,然後把 SESSION 的值傳遞給 loginctl 來檢視當前會話的型別

$ loginctl
SESSION  UID USER  SEAT  TTY STATE  IDLE SINCE
      2 1000 mifen seat0 -   active no   -    

$ loginctl show-session 2 -p Type
Type=x11

這個方法也存在剛開始我們說的 ssh 問題,將會得到 Type=tty。如果存在多使用者,這個還能看到其它人的會話型別,比如我是用 ssh 連線到遠端主機,把我的引數丟進去得到 tty,看到某個使用者的引數帶字母(c2),和其他人不一樣,把 c2 丟進去得到的結果是 x11。也就是說用這個辦法的話則是儘量變數所有的會話,忽略掉返回 tty 的,才知道答案,比如下面的例子:

$ loginctl
SESSION  UID USER  SEAT  TTY   STATE  IDLE SINCE
     12 1000 mifen -     pts/2 active no   -
      2 1000 mifen seat0 -     active no   -

$ loginctl show-session 12 -p Type
Type=tty
$ loginctl show-session 2 -p Type
Type=x11

上面的例子中,用 ssh 連線到遠端主機,loginctl 得到的結果有兩個,分別檢視型別後是 tty、x11,因此可以判斷遠端主機採用的是 x11

相關文章