.png)
Nach dem Upgrade auf 14.10 kann der Gnome-Settings-Daemon /usr/share/gnome-session/sessions/xmonad.session nicht richtig geladen werden. Hat jemand das gleiche Problem?
Antwort1
Hier ist eine detailliertere Lösung basierend auf Jianingys Antwort. Sie behebt einige Probleme, die ich nach dem Upgrade auf Ubuntu 14.10 hatte. Zu den behobenen Problemen gehören:
- Multimediatasten funktionieren nicht
- Anzeigeeinstellungen im Gnome-Kontrollzentrum funktionieren nicht
Sie müssen DesktopName=Unity
hinzufügen /usr/share/gnome-session/sessions/xmonad.session
.
[GNOME Session]
Name=Xmonad/GNOME
RequiredComponents=gnome-settings-daemon;gnome-panel;xmonad
DesktopName=Unity
Außerdem dbus-send
müssen Sie im Hinblick auf die Änderungen in Ubuntu 14.10 --print-reply=literal
anstelle von verwenden --print-reply=string
. Ich habe das zu meinem hinzugefügt xmonad.hs
und definiere main als 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]
Antwort2
OK, ich habe eine Lösung gefunden.
Zunächst einmal: Ab 14.10 enthalten viele Unity- und Gnome-Anwendungskonfigurationen (diese *.desktop in /usr/share/applications und /etc/xdg/autostart) ein „OnlyShowIn=Unity“. Daher müssen wir ein desktopname=unity zu /usr/share/gnome-session/sessions/xmonad.session hinzufügen, um diese Anwendungen ausführen zu können.
Zweitens muss cmd „dbus-send --print-reply=string“ jetzt „dbus-send --print-reply=literal“ sein. Daher kann das alte xmonad gnomeConfig xmonad nicht als WM registrieren. Wir müssen den dbus-send-Befehl von =string in =literal ändern.
Antwort3
- https://gist.github.com/bewest/46b849da04684f0ce401
- http://blog.ezyang.com/2014/12/ubuntu-utopic-upgrade-xmonad/comment-page-1/
Die --print-reply=string
Syntax verursacht einen Fehler. Der Name der Anwendung, die „registriert“ werden muss, ist nicht xmonad
, sondern xmonad.desktop
. Ich habe schließlich eine ~/.xmonad/hooks
Datei mit dem folgenden Befehl erstellt:
dbus-send --session --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RegisterClient string:xmonad.desktop string:$DESKTOP_AUTO_START_ID
Ich habe auch den vorherigen Fix gefunden, die Einstellung DesktopName=Unity
sorgt dafür, dass sie gnome-control-center
ordnungsgemäß verwendet wird.
Antwort4
Hier ist eine sehr einfache Möglichkeit, das Problem „xmonad kann sich nicht registrieren“ zu umgehen (in anderen Antworten durch Verwendung von xmonad-Hooks oder Schreiben von gnomeRegister2
) : xmonad.desktop
Ersetzen Sie in der Datei Exec=xmonad
durch Exec=sh -c "xmonad &"
. Dies führt zu einem sehr schnellen Start -- ich habe die IdeeHier-- aber es könnte andere Dinge kaputt machen.
Das DesktopName=Unity
Teil ist immer noch unverzichtbar.
UPDATE (16. November 2015)
Ich kämpfe regelmäßig mit XMonad + Gnome, wenn ich Ubuntu aktualisiere. Meine Konfigurationsdateien sindverfügbar auf GitHub, falls jemand sehen möchte, wie ich es zuletzt geschafft habe, dass XMonad und Gnome gut zusammenarbeiten.
Ab dem 16. November 2015 sind die wichtigen Dateien
~/.xsession
:https://github.com/ntc2/conf/blob/master/dot.xsession- Gnome
*.desktop
-Dateien:https://github.com/ntc2/conf/tree/master/dot.local/share/applications(Ich verwalte meine XMonad + Gnome-Konfiguration in meinem Home-Verzeichnis, ohne irgendwelche Systemdateien bearbeiten zu müssen*.desktop
; siehe meineconf-Installationsskriptfür den Speicherort dieser Dateien). - Gnome
*.session
-Datei:https://github.com/ntc2/conf/blob/master/dot.config/gnome-session/sessions/local-xmonad-session.session
Für Ubuntu 15.04 und 15.10 war die wichtigste und am schwierigsten zu entdeckende Änderung die Ergänzung export XDG_CURRENT_DESKTOP=Unity
zu meinem ~/.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
Um beispielsweise beim Drücken von Lautstärketasten oder bei der Anpassung der Bildschirmhelligkeit grafische Benachrichtigungen zu erhalten, musste ich das notify-osd
Paket installieren.