有什么方法(例如命令或环境变量)可以确定什么窗口管理器是当前会话中正在运行的那个吗?
答案1
如果你已经wmctrl
安装,命令输出的第一行
wmctrl -m
将显示窗口管理器的名称。如果尚未wmctrl
安装,请使用以下命令进行安装:
sudo apt-get install wmctrl
请注意,man wmctrl
(即man
的页面wmctrl
)部分内容如下:
-m
显示有关窗口管理器的信息...
在我的 Ubuntu 11.10 / Linux 3.0.0-14 - generic #23-Ubuntu x86_64 / metacity 2.34.1 系统上,输出的第一行是wmctrl -m
: Name: Metacity
whileshowd echo $DESKTOP_SESSION
andshowd 。ubuntu-2d
echo $XDG_CURRENT_DESKTOP
Unity
在旧笔记本电脑上安装新版 Ubuntu 15.10Ubuntu desktop
软件时,第一行输出wmctrl -m
为:Name: Compiz
而DESKTOP_SESSION
和XDG_CURRENT_DESKTOP
值为ubuntu
和Unity
答案2
在 Linux 系统上,我测试了环境变量XDG_CURRENT_DESKTOP
并GDMSESSION
得到了以下结果。
您可以使用这一行来获取输出:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
Ubuntu 18.04 和 20.04(GNOME 上的 Ubuntu)
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu
Ubuntu 18.04(Wayland 上的 Ubuntu)
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu-wayland
Ubuntu 16.04
团结 (7)
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
Ubuntu 14.04
Unity 与 Mir 一起运行
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
笔记 MIR_SERVER_NAME
也设置了
MIR_SERVER_NAME=session-$NUMBER
无需 Mir 即可运行 Unity
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
西门子
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xfce
Ubuntu 12.04
桌面环境
XDG_CURRENT_DESKTOP=
GDMSESSION=kde-plasma
Unity 3D
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
Unity 2D
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu-2d
侏儒
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-shell
侏儒经典
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-classic
Gnome Classic(无效果)
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-fallback
其他基于 Ubuntu 的发行版
薄荷 13(肉桂)
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=cinnamon
Mint 16(KDE 版本)
XDG_CURRENT_DESKTOP=KDE
GDMSESSION=default
薄荷 17(肉桂色)
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=default
Lubuntu 12.04
XDG_CURRENT_DESKTOP=LXDE
GDMSESSION=Lubuntu
瓦斯塔14.04 / 18.04
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=cinnamon
瓦斯塔14.04 使用 Gnome 桌面。
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome
Ubuntu Mate 18.04
XDG_CURRENT_DESKTOP=MATE
GDMSESSION=mate
Xubuntu 18.04
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xubuntu
Kali Linux kali-rolling 2020.2
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=lightdm-xsession
答案3
在终端中输入env
以查看所有环境变量。 其中一些是:
XDG_CURRENT_DESKTOP- 告诉你正在使用的桌面环境
GDMS会议- 告诉您从 lightdm 欢迎程序中选择了哪个选项来登录。
要使用它们,请转到终端并输入:
echo $XDG_CURRENT_DESKTOP
(如果您使用 Unity,则会输出例如“unity”)
或者
echo $GDMSESSION
(例如,如果您在登录时选择了 ubuntu,则会输出“ubuntu”;如果您在登录时选择了 ubuntu-2d,则会输出“ubuntu-2d”。)
如果你仔细观察一下下面的输出,你就会env
发现桌面会话和配置文件
由于您要查找的是正在使用的窗口管理器的名称,因此我认为获取此信息的唯一方法是查看进程列表。为此,有一个名为pgrep
(维基百科)。由于参数 -l 添加了进程 ID,因此我执行了以下操作来获取名称:
pgrep -l compiz |cut -d " " -f2
由于该进程由同一用户运行,因此无需在前缀中添加 sudo 部分。然后您可以使用它来创建一个基于窗口管理器执行操作的脚本。
要查找其他类型,只需将单词更改compiz
为其他单词,如mutter
,,kwin
等等。
答案4
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t