如何知道使用的是 Wayland 还是 X11

Deh*_*bop 272 linux x11 wayland

所以我刚刚在我的笔记本电脑上安装了最新的 Kali Linux,它基于 Debian 7(oldstable)。然后我将整个东西升级到 Debian 8。

我一直想要 Wayland 而不是 X11,所以我安装了必要的软件包。然后创建了一个最小~./config/weston.ini配置。现在,从 Gnome 登录屏幕:登录画面

我可以启动到Gnome on WaylandLXDE(除其他外)。前者的成功非常有限,后者 (LXDE) 几乎完美,尽管面板需要设置(我必须查找 freedesktop)。

无论如何,在 LXDE 中,GUI 的响应速度比在 oldstable 上更快,并且在运行 Windows 7 时可能也一样快。我很高兴。

但我想知道这是因为从 Debian 7 到 8 的所有库/模块升级还是因为使用 Wayland(如果我真的在使用 Wayland)。我浏览了 htop,发现了一个/usr/bin/Xorg正在运行且没有名为“wayland”的进程。那么我目前正在运行哪一个?

And*_*eas 351

通过发出以下命令获取要传入的会话 ID:

loginctl
Run Code Online (Sandbox Code Playgroud)

这将向您显示如下内容:

SESSION  UID USER          SEAT  TTY
     c2 1000 yourusername  seat0    

1 sessions listed.
Run Code Online (Sandbox Code Playgroud)

在该示例中,c2是会话 ID。

然后:

loginctl show-session <SESSION_ID> -p Type
Run Code Online (Sandbox Code Playgroud)

如果你想在一个命令上完成所有这些:

loginctl show-session $(awk '/tty/ {print $1}' <(loginctl)) -p Type | awk -F= '{print $2}'
Run Code Online (Sandbox Code Playgroud)

使用与您的用户名相对应的那个。

参考:https : //fedoraproject.org/wiki/How_to_debug_Wayland_problems

所以,对我来说是:

$ loginctl show-session 2 -p Type                                                  
Type=wayland
Run Code Online (Sandbox Code Playgroud)

  • 如果您不使用显示管理器,无论您使用 x11 还是 wayland,都会输出 `tty`。 (7认同)
  • 根据 [Fedora 28 docs](https://docs.fedoraproject.org/f28/system-administrators-guide/Wayland.html),您还可以使用 `echo $WAYLAND_DISPLAY`,如果不使用 Wayland,它不会打印任何内容。 (6认同)
  • ``loginctl show-session `loginctl|grep &lt;YOUR_USER_NAME&gt;|awk '{print $1}'` -p Type`` (5认同)
  • @DSJustice 你的反引号已经降价了。可以复制这个:`loginctl show-session $(loginctl|grep $(whoami) |awk '{print $1}') -p Type` (5认同)
  • @Devon 对于 `echo $XDG_SESSION_TYPE` 也是如此。所以可能[这个](https://unix.stackexchange.com/a/559950/383543)答案是最安全的。 (4认同)
  • 感谢您的出色回答。请补充说 OP 应该首先运行 `loginctl` 来查看会话。 (3认同)
  • 在较新版本的 systemd 中,您还可以使用“loginctl show-session self -p Type”。 (2认同)

Ayu*_*ush 287

如何知道使用的是 Wayland 还是 X11?

在 X11 系统上

$ echo $XDG_SESSION_TYPE
x11
Run Code Online (Sandbox Code Playgroud)

在一些 Wayland 系统上

$ echo $XDG_SESSION_TYPE
wayland
Run Code Online (Sandbox Code Playgroud)

编辑:这在某些情况下似乎不起作用。看评论和使用antismap的答案,而不是

  • 如果未设置此变量,这意味着什么? (36认同)
  • 我是 X11 用户,没有显示管理器。这输出`tty`。 (12认同)
  • 有关检查此问题的正确方法,请参阅 /sf/answers/3187606621/。 (4认同)
  • 有没有办法同时显示正在运行的 Wayland 协议的版本? (2认同)
  • 我是没有显示管理器的 Wayland 用户。这输出`tty`。 (2认同)

小智 63

这适用于 Fedora 和 Ubuntu 18.04.5 LTS:

loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type
Run Code Online (Sandbox Code Playgroud)

  • /me 咕哝着`grep ... | awk`,但是嘿,没关系。 (4认同)
  • 管道的力量和 UNIX 哲学。好的。 (2认同)
  • 一个小的变化:`loginctl show-session $(loginctl show-user $(whoami) -p Display --value) -p Type --value` 我猜这假设每个用户有一个单一的会话ID:我不确定可以有多个 ID。 (2认同)

Ale*_*ins 25

我最喜欢Ayush 的回答,但我想我会说Andreas 的回答可以在一行中完成:

loginctl show-session "$XDG_SESSION_ID" -p Type
Run Code Online (Sandbox Code Playgroud)

您还可以通过--value删除Type=前缀。

  • 对我来说,此操作失败并显示错误消息:“无法获取会话路径:调用者不属于任何已知会话。”显然,我的 Wayland 会话上未设置“$XDG_SESSION_ID”。 (3认同)

Léa*_*ris 11

使用 POSIX-shell 语法判断哪种会话类型且没有子 shell:

printf 'Session is: %s\n' "${DISPLAY:+X11}${WAYLAND_DISPLAY:+WAYLAND}"
Run Code Online (Sandbox Code Playgroud)

替代处理所有 4 种状态:

case $((0${DISPLAY:+1} | 0${WAYLAND_DISPLAY:+2})) in
1) session=X11 ;;
2) session=WAYLAND ;;
3) session='both X11 and WAYLAND' ;;
*) session='neither X11 nor WAYLAND' ;;
esac

printf 'Session is: %s\n' "$session"
Run Code Online (Sandbox Code Playgroud)


小智 8

发出指令

ps aux | grep gnome-shell
Run Code Online (Sandbox Code Playgroud)

它会给输出

/usr/bin/gnome-shell --wayland --display-server
Run Code Online (Sandbox Code Playgroud)

如果 Wayland 处于活动状态。

  • 如果`wayland` 是默认值呢? (9认同)
  • 我的“gnome-shell”进程没有使用 --wayland 选项运行,但是当我运行 `ps aux | grep wayland`,我发现 /usr/bin/Xwayland 正在运行。 (4认同)
  • `gnome-shell` 仅在您使用 gnome 作为 DM 时才有效。 (4认同)
  • 通常你有两个 `gnome-shell` 进程:一个用于 gdm,一个用于用户会话。gdm 的 gnome-shell 通常使用 wayland,但用户会话的 gnome-shell 使用 X11。 (2认同)

小智 7

最简单的方法是检查WAYLAND_DISPLAY变量是否设置。

  • 是的,然后如果失败,请检查“DISPLAY”以查看是否正在使用 X11。 (9认同)

小智 5

(尝试)在 Alt+F2 菜单中运行命令“r”。它将在 Xorg 中重新启动环境(不会丢失窗口和进程),但在 Wayland 中它会给出消息“在 Wayland 中无法重新启动”。


SD *_*len 0

不,当我切换到 Wayland 来咯咯笑时,我在 htop 中注意到了一个名为 Wayland 的 pid。除非它被改变,否则这就是人们应该看到的。更新:这是显示 Wayland 流程的屏幕截图。

在此输入图像描述

  • 我在你的屏幕截图中没有看到“wayland”进程;您突出显示的行是“dbus-launch”进程,启动一个名为“gnome-wayland”的会话。 (7认同)