web-dev-qa-db-fra.com

Gnome Xmonad cassé après la mise à niveau vers 14.10

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?

3
jianingy

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:

  • Les touches multimédia ne fonctionnent pas
  • Les paramètres d'affichage dans Gnome-control-center ne fonctionnent pas

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]
5
Marc Belmont

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.

1
bewest

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.

1
jianingy

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


XMonad.Hooks.Script

Interface de crochet de script

Fournit une interface simple pour exécuter un script ~/.xmonad/hooks avec le nom d'un hook.

Synopsis

Usage

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.


0
bewest

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.

MISE À JOUR (16 novembre 2015)

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

Pour 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.

0
ntc2