UPDATE (16. November 2015)

UPDATE (16. November 2015)

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=Unityhinzufü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-sendmüssen Sie im Hinblick auf die Änderungen in Ubuntu 14.10 --print-reply=literalanstelle von verwenden --print-reply=string. Ich habe das zu meinem hinzugefügt xmonad.hsund 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

Die --print-reply=stringSyntax verursacht einen Fehler. Der Name der Anwendung, die „registriert“ werden muss, ist nicht xmonad, sondern xmonad.desktop. Ich habe schließlich eine ~/.xmonad/hooksDatei 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=Unitysorgt dafür, dass sie gnome-control-centerordnungsgemäß 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.desktopErsetzen Sie in der Datei Exec=xmonaddurch 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=UnityTeil 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

Für Ubuntu 15.04 und 15.10 war die wichtigste und am schwierigsten zu entdeckende Änderung die Ergänzung export XDG_CURRENT_DESKTOP=Unityzu 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-osdPaket installieren.

verwandte Informationen