如何让 xmonad 与 GNOME 回退会话一起运行?

emc*_*sen 7 gnome 11.10 xmonad gnome-classic

我没有运气让 XMonad 通过 gnome 回退会话在 11.10(x64,全新安装)中运行。我试过调整来自

http://markhansen.co.nz/xmonad-ubuntu-lucid/

http://markhansen.co.nz/xmonad-ubuntu-oneiric/

但没有运气。如果有人有想法,我想听听。

Håk*_*and 5

如何在 11.10 的 GNOME Classic 会话中使用自定义窗口管理器

以sawfish 窗口管理器为例(抱歉,我不使用xmonad)。

1. 修复 gnome-classic.session

gnome-classic.session 中似乎有 一个错误。以下是修复方法:

直接编辑系统文件 /usr/share/gnome-session/sessions/gnome-classic.session 或在您的主目录中复制一份:

mkdir ~/.config/gnome-session/sessions
cp -ai /usr/share/gnome-session/sessions/gnome-classic.session ~/.config/gnome-session/sessions/
Run Code Online (Sandbox Code Playgroud)

进行此更改:

 [GNOME Session]
 Name=GNOME Classic
 RequiredComponents=gnome-panel;gnome-settings-daemon;
-RequiredProviders=windowmanager;notifications;
+RequiredProviders=windowmanager;
 DefaultProvider-windowmanager=gnome-wm
 DefaultProvider-notifications=notify-osd
 IsRunnableHelper=/usr/lib/gnome-session/gnome-session-check-accelerated
 FallbackSession=gnome-fallback
 DesktopName=GNOME
Run Code Online (Sandbox Code Playgroud)

2.1. 备选方案 1:在 ~/.gnomerc 中设置 WINDOW_MANAGER

2.1.a. 创建/编辑 ~/.gnomerc 并添加以下内容:

export WINDOW_MANAGER=sawfish
Run Code Online (Sandbox Code Playgroud)

将本例中的“sawfish”替换为您要使用的窗口管理器。如果您现在使用“GNOME Classic”会话登录,您将获得您选择的窗口管理器。

2.1.b. 更快的启动:

如果您在使用上述解决方案登录时遇到 30 秒延迟,以下将解决该问题(这可能只是锯齿问题)。

制作一个启动脚本,例如~/bin/my-gnome-wm:

#!/bin/bash
sawfish &
Run Code Online (Sandbox Code Playgroud)

使其可执行:

chmod u+x ~/bin/my-gnome-wm
Run Code Online (Sandbox Code Playgroud)

将 ~/.gnomerc 更改为:

export WINDOW_MANAGER="$HOME/bin/my-gnome-wm"
Run Code Online (Sandbox Code Playgroud)

2.2. 备选方案 2:使用sawfish.desktop

2.2.a. 再次编辑 gnome-classic.session:

 [GNOME Session]
 Name=GNOME Classic
 RequiredComponents=gnome-panel;gnome-settings-daemon;
 RequiredProviders=windowmanager;
-DefaultProvider-windowmanager=gnome-wm
+DefaultProvider-windowmanager=sawfish
 DefaultProvider-notifications=notify-osd
 IsRunnableHelper=/usr/lib/gnome-session/gnome-session-check-accelerated
 FallbackSession=gnome-fallback
 DesktopName=GNOME
Run Code Online (Sandbox Code Playgroud)

将本例中的“sawfish”替换为您要使用的窗口管理器。这需要像“sawfish.desktop”这样的文件安装在正确的位置,例如/usr/share/applications/sawfish.desktop。

2.2.b. 更快的启动:

如果您在使用上述解决方案登录时遇到 30 秒延迟,以下将解决该问题(这可能只是锯齿问题)。

直接编辑系统文件 /usr/share/applications/sawfish.desktop 或在您的主目录中复制一份:

mkdir ~/.local/share/applications
cp -ai /usr/share/applications/sawfish.desktop ~/.local/share/applications/
Run Code Online (Sandbox Code Playgroud)

进行此更改:

 [Desktop Entry]
 Name=Sawfish
 Name[el]=Ðñéïíüøáñï (Sawfish)

 Type=Application
-Exec=sawfish
+Exec=bash -c 'sawfish&'
 TryExec=sawfish

 Terminal=false
 NoDisplay=true

 X-GNOME-WMName=Sawfish
 X-GNOME-Autostart-Phase=WindowManager
 X-GNOME-Provides=windowmanager
 X-GNOME-Autostart-Notify=true
Run Code Online (Sandbox Code Playgroud)

笔记

使用 DefaultProvider-windowmanager=gnome-wm 并且没有在 .gnomerc 中设置 WINDOW_MANAGER,我们似乎同时获得了 Unity 和 GNOME Classic,彼此叠加!

~/.xsession-errors 中的这个条目可能说明了为什么会有 30 秒的延迟:

gnome-session[23870]: WARNING: Application 'gnome-wm.desktop' failed to register before timeout
Run Code Online (Sandbox Code Playgroud)

为什么要创建 my-gnome-wm 脚本?因为这似乎不起作用:

export WINDOW_MANAGER='/usr/bin/sawfish&'
Run Code Online (Sandbox Code Playgroud)

这也不行:

export WINDOW_MANAGER='bash -c "/usr/bin/sawfish&"'
Run Code Online (Sandbox Code Playgroud)


emc*_*sen 3

快速修复:登录,然后执行killall metacity & xmonad

它似乎有效,尽管我遇到了间歇性的键盘和鼠标问题,这些问题可能与此解决方案相关,也可能无关。

另外,考虑到这有效,您可能会认为我可以交换 /usr/share/gnome-session/sessions/gnome-classic.session 中的窗口管理器值,但是当我更改该值时,什么也没有发生。