Après avoir été mis à niveau vers 14.10, gnome-settings-daemon ne peut pas être chargé correctement /usr/share/gnome-session/sessions/xmonad.session. y a-t-il quelqu'un qui a le même problème?
Voici une solution plus détaillée basée sur la réponse de Jianingy. Il corrige quelques problèmes que je rencontrais après la mise à niveau vers Ubuntu 14.10. Les problèmes qu'il résout incluent:
Vous devez ajouter DesktopName=Unity
à /usr/share/gnome-session/sessions/xmonad.session
.
[GNOME Session]
Name=Xmonad/GNOME
RequiredComponents=gnome-settings-daemon;gnome-panel;xmonad
DesktopName=Unity
De plus, en ce qui concerne les modifications de dbus-send
dans Ubuntu 14.10, vous devez utiliser --print-reply=literal
au lieu de --print-reply=string
. J'ai ajouté cela à mon xmonad.hs
et je définis principal comme 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]
La syntaxe --print-reply=string
provoque une erreur. Le nom de l'application devant être "enregistrée" n'est pas xmonad
, mais xmonad.desktop
. J'ai fini par créer un fichier ~/.xmonad/hooks
avec la commande suivante:
dbus-send --session --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RegisterClient string:xmonad.desktop string:$DESKTOP_AUTO_START_ID
J'ai également trouvé le correctif précédent, le réglage de DesktopName=Unity
entraîne l'utilisation correcte de gnome-control-center
.
OK, j'ai trouvé une solution.
Tout d'abord, à partir de 14.10. De nombreuses configurations d'applications unitaires et gnome (celles * .desktop de/usr/share/applications et/etc/xdg/autostart) commencent à inclure un "OnlyShowIn = Unity". Par conséquent, nous devons ajouter un nom de bureau = unit à /usr/share/gnome-session/sessions/xmonad.session afin de laisser ces applications s'exécuter.
Deuxièmement, les cmd 'dbus-send --print-reply = string' doivent maintenant être 'dbus-send --print-reply = literal'. par conséquent, le vieux xmonad gnomeConfig ne peut pas enregistrer xmonad en tant que wm. nous devons changer la commande dbus-send de = chaîne en = littéral.
Je l'ai mentionné brièvement dans le Gist, mais j'ai trouvé dans la documentation XMonad que le hook de démarrage est exécuté automatiquement, cette configuration:
, startupHook = execScriptHook "startup"
Le script Shell s’exécute automatiquement, ce que j’ai trouvé plus facile que monkeypatching avec le hook haskell.
http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-Script.html
Fournit une interface simple pour exécuter un script ~/.xmonad/hooks avec le nom d'un hook.
Ce module vous permet d'exécuter un script situé au centre avec le nom de texte d'un hook. Le script est supposé se trouver dans ~/.xmonad/hooks.
Par exemple, si vous souhaitez exécuter le démarrage du hook dans votre script à chaque exécution de votre hook de démarrage, vous pouvez modifier votre configuration xmonad en tant que telle:
main = xmonad $ defaultConfig { ... startupHook = execScriptHook "startup" ... }
Maintenant, chaque fois que le hook de démarrage est exécuté, la commande ~/.xmonad/hooks startup
le sera également.
Voici un moyen très simple de contourner le problème "xmonad ne parvient pas à s'inscrire" (traité dans d'autres réponses en utilisant des crochets xmonad ou en écrivant gnomeRegister2
): dans le fichier xmonad.desktop
, remplacez Exec=xmonad
par Exec=sh -c "xmonad &"
. Cela se traduit par un démarrage très rapide - j'ai eu l'idée ici - mais cela pourrait casser d'autres choses.
La partie DesktopName=Unity
est toujours essentielle.
Je me bats régulièrement contre XMonad + Gnome lors de la mise à niveau d'Ubuntu. Mes fichiers de configuration sont disponible sur GitHub , au cas où quelqu'un voudrait voir comment j'ai récemment obtenu que XMonad et Gnome jouent à Nice ensemble.
À partir du 16 novembre 2015, les fichiers importants sont
~/.xsession
: https://github.com/ntc2/conf/blob/master/dot.xsession*.desktop
fichiers: https://github.com/ntc2/conf/tree/master/dot.local/share/applications (Je conserve ma configuration XMonad + Gnome dans mon répertoire personnel , sans avoir à éditer les fichiers système *.desktop
, voir mon script d'installation conf pour l'emplacement de ces fichiers).*.session
fichier: https://github.com/ntc2/conf/blob/master/dot.config/gnome-session/sessions/local-xmonad-session.sessionPour Ubuntu 15.04 et 15.10, le changement le plus important et le plus difficile à découvrir consistait à ajouter export XDG_CURRENT_DESKTOP=Unity
à mon ~/.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
En outre, pour obtenir des notifications graphiques sur, par exemple, touches de volume et réglage de la luminosité de l’écran, j’avais besoin d’installer le package notify-osd
.