升级到 14.10 后,gnome-settings-daemon 无法正确加载 /usr/share/gnome-session/sessions/xmonad.session。有谁遇到同样的问题吗?
答案1
以下是基于 Jianingy 回答的更详细的解决方案。它修复了我升级到 Ubuntu 14.10 后遇到的一些问题。它修复的问题包括:
- 多媒体键不起作用
- Gnome 控制中心中的显示设置不起作用
您需要添加DesktopName=Unity
到/usr/share/gnome-session/sessions/xmonad.session
。
[GNOME Session]
Name=Xmonad/GNOME
RequiredComponents=gnome-settings-daemon;gnome-panel;xmonad
DesktopName=Unity
此外,关于dbus-send
Ubuntu 14.10 中的变化,您必须使用--print-reply=literal
而不是--print-reply=string
。我已将其添加到我的 中xmonad.hs
,并将 main 定义为main = xmonad $ gnomeConfig2
。
import XMonad.Config.Desktop
import XMonad.Util.Run (safeSpawn)
import qualified Data.Map as M
import System.Environment (getEnvironment)
data RescreenToggleState = RescreenToggleState Bool deriving Typeable
instance ExtensionClass RescreenToggleState where
initialValue = RescreenToggleState True
gnomeConfig2 = desktopConfig
{ terminal = "gnome-terminal"
, keys = gnomeKeys <+> keys desktopConfig
, startupHook = gnomeRegister2 >> startupHook desktopConfig }
gnomeKeys (XConfig {modMask = modm}) = M.fromList $
[ ((modm, xK_p), gnomeRun)
, ((modm .|. shiftMask, xK_q), spawn "gnome-session-save --kill") ]
-- | Register xmonad with gnome. 'dbus-send' must be in the $PATH with which
-- xmonad is started.
--
-- This action reduces a delay on startup only only if you have configured
-- gnome-session>=2.26: to start xmonad with a command as such:
--
-- > gconftool-2 -s /desktop/gnome/session/required_components/windowmanager xmonad --type string
gnomeRegister2 :: MonadIO m => m ()
gnomeRegister2 = io $ do
x <- lookup "DESKTOP_AUTOSTART_ID" `fmap` getEnvironment
whenJust x $ \sessionId -> safeSpawn "dbus-send"
["--session"
,"--print-reply=literal"
,"--dest=org.gnome.SessionManager"
,"/org/gnome/SessionManager"
,"org.gnome.SessionManager.RegisterClient"
,"string:xmonad"
,"string:"++sessionId]
答案2
好的,我找到解决方案了。
首先,从 14.10 开始,许多 unity 和 gnome 应用程序配置(/usr/share/applications 和 /etc/xdg/autostart 中的 *.desktop)开始包含“OnlyShowIn=Unity”。因此,我们必须在 /usr/share/gnome-session/sessions/xmonad.session 中添加一个desktopname=unity,才能让这些应用程序运行。
其次,cmd“dbus-send --print-reply=string”现在必须是“dbus-send --print-reply=literal”。因此,旧的 xmonad gnomeConfig 无法将 xmonad 注册为 wm。我们必须将 dbus-send 命令从 =string 更改为 =literal。
答案3
- https://gist.github.com/bewest/46b849da04684f0ce401
- http://blog.ezyang.com/2014/12/ubuntu-utopic-upgrade-xmonad/comment-page-1/
语法--print-reply=string
导致错误。需要“注册”的应用程序名称不是xmonad
,而是xmonad.desktop
。我最终创建了一个~/.xmonad/hooks
包含以下命令的文件:
dbus-send --session --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RegisterClient string:xmonad.desktop string:$DESKTOP_AUTO_START_ID
我还发现了之前的修复,设置DesktopName=Unity
使得gnome-control-center
可以正常使用。
答案4
这是一个非常简单的方法来解决“xmonad 注册失败”问题(在其他答案中通过使用 xmonad 钩子或写入来解决gnomeRegister2
):在xmonad.desktop
文件中,替换Exec=xmonad
为Exec=sh -c "xmonad &"
。这会导致非常快速的启动——我明白了这里——但它可能会破坏其他东西。
这DesktopName=Unity
部分仍然很重要。
更新(2015 年 11 月 16 日)
每次升级 Ubuntu 时,我都会遇到 XMonad + Gnome 的问题。我的配置文件是可在 GitHub 上获取,以防有人想看看我最近如何让 XMonad 和 Gnome 一起协同运行。
截至 2015 年 11 月 16 日,重要文件如下
~/.xsession
:https://github.com/ntc2/conf/blob/master/dot.xsession- Gnome
*.desktop
文件:https://github.com/ntc2/conf/tree/master/dot.local/share/applications(我将 XMonad + Gnome 配置保存在主目录中,无需编辑任何系统*.desktop
文件;请参阅我的conf 安装脚本这些文件的存放位置)。 - Gnome
*.session
文件:https://github.com/ntc2/conf/blob/master/dot.config/gnome-session/sessions/local-xmonad-session.session
对于 Ubuntu 15.04 和 15.10,最重要的,也是最难发现的变化是添加export XDG_CURRENT_DESKTOP=Unity
到我的~/.xsession
:
# Without setting this explicitly, it gets te value "Gnome", which
# makes `unity-settings-daemon` fail to start and we get
# `gnome-settings-daemon` instead. Not sure what this variable does,
# but I got the hint here:
# https://bugzilla.gnome.org/show_bug.cgi?id=729575.
#
# Setting to values other than "Unity" -- e.g. "default", which `env`
# tells me is the value of related variables, or "GNOME-Flashback",
# which is the `DesktopName` I might suspect here -- I get weird
# behavior, e.g. none of the dock items appear in the Gnome panel.
export XDG_CURRENT_DESKTOP=Unity
另外,为了获得有关音量按键和屏幕亮度调整等的图形通知,我需要安装该notify-osd
软件包。