Answers:
不幸的是,每个发行版的配置都不同:
Debian / Ubuntu
/etc/X11/default-display-manager
RedHat(也应适用于Fedora)
/etc/sysconfig/desktop
开源软件
/etc/sysconfig/displaymanager
cat
。
/usr/bin/xdm
-这是否意味着xdm是我的显示管理器?
没有。显示管理器不一定与同一X服务器上正在运行的其他任何东西有关。在登录之前,显示管理器将运行;由系统管理员选择。用户可以选择其他所有内容(窗口管理器,会话管理器,桌面环境等)。甚至不需要一个显示管理器:如果您以文本模式登录并使用来启动GUI startx
,则不会涉及任何显示管理器。
您可以检查哪个显示管理器是系统上的默认显示管理器。这只会在一些普遍但不普遍的假设下给出正确的答案。如果出于任何原因手动运行其他经理,则此方法不会告诉您。
一个不错的选择是找出X服务器的进程ID:如果有,它的父进程可能是显示管理器。这要求您的客户端与X服务器在同一台计算机上运行。lsof /tmp/.X11-unix/X${DISPLAY#:}
将显示X服务器进程(假设X套接字位于中/tmp/.X11-unix
)。
x=$(lsof -F '' /tmp/.X11-unix/X0); x=${x#p}
ps -p $(ps -o ppid -p $x)
(说明:lsof -F ''
打印输出p1234
。。该-F
选项表示机器可解析的输出格式,并且''
表示仅打印PID及其p
前一个字母。x=${x#p}
去除起始字母p
。最后一行获取X服务器父服务器的PID。 (ps -o ppid -p $x
),并调用ps
以显示有关该父进程的信息。)
有些发行版允许安装多个显示管理器。除非您有多座系统,否则只有一个运行。要列出Debian及其衍生版本下所有已安装的显示管理器软件包:
aptitude -F %p search '~i ~P^x-display-manager$'
要么
</var/lib/dpkg/status awk '
/^Package: / {package = $2}
/^Provides: .*x-display-manager/ {print package}'
如果您使用基于systemd的分发。因为您可能安装了多个显示管理器,所以此命令将提供当前配置的显示管理器的名称。
grep '/usr/s\?bin' /etc/systemd/system/display-manager.service
输出将类似于
ExecStart=/usr/bin/mdm
看起来我在使用薄荷显示管理器。
cat <file> | grep <searchterm>
而不是第二个字符串grep <searchterm> <file>
。
显示管理员名称应位于DESKTOP_SESSION中
echo $DESKTOP_SESSION
为我返回“ gnome”。
编辑
你是对的。他们正在XFCE的bugzilla上进行反复讨论,因此它可能不是很可靠。
$DESKTOP_SESSION
是unknown
。
就像@Gilles所说的那样,显示管理器将启动您的桌面环境。
根据Debian Wiki的说法,这些大多以结尾结尾dm
,唯一的例外是slim
。
因此,这足以满足大多数人的需求:
ps auxf | awk '{print $11}' | \grep --color -e dm$ -e slim$
或者可以肯定的是,它作为父进程存在,并且没有分叉(从init系统中除外):
ps auxf | awk '{print $11}' | \grep -e "^/.*dm$" -e "/.*slim$"
lightdm
。最佳答案中的RedHat / Fedora解决方案不起作用,配置似乎已移动。
您可以通过名为screenfetch的第三方脚本来执行此操作
Screenfetch是可用于Linux的bash脚本,可显示系统信息以及Linux发行版的ASCII版本的系统徽标
通过软件包管理器进行安装
sudo apt-get install screenfetch
(假设您使用的是Debian变体)
并
screenfetch
在您的终端中运行
X是高度模块化的,因此,如果您真的想要它,可以混合桌面环境和Windows管理器。毕竟,窗口管理器只是绘制窗口的一种方法(这就是简单的视图)。
因此,如果您使用gnome,metacity曾经是Windows管理器,但现在已由Mutter取代。
混合的问题是在现代桌面环境中,桌面和窗口管理器彼此紧密相连。太多的混合可能最终导致功能减少。
如前所述,$ DESKTOP_SESSION可以运行,但是如果您想询问您的X11服务器,则可以执行以下操作:
xprop -id $(xprop -root _NET_SUPPORTING_WM_CHECK | cut -d\# -f2) WM_NAME
分解成
xprop -root _NET_SUPPORTING_WM_CHECK | cut -d\# -f2
0x1000052
xprop -id 0x1000052 WM_NAME
WM_NAME(STRING) = "xfwm4"
它获取由窗口管理器创建的窗口的ID。规范说(http://standards.freedesktop.org/wm-spec/1.3/ar01s03.html):
_NET_SUPPORTING_WM_CHECK, WINDOW/32
The Window Manager MUST set this property on the root window to be the ID
of a child window created by himself, to indicate that a compliant window
manager is active.
然后,您要求提供所述窗口的WM_NAME属性。
WM_NAME是:
The WM_NAME property is an uninterpreted string that the client wants the
window manager to display in association with the window (for example, in
a window headline bar).
_NET_SUPPORTING_WM_CHECK
提供有关窗口管理器而不是显示管理器的信息。它甚至不总是有效。在我的系统上,该属性设置为窗口ID,但相关窗口没有名称。