- 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