Gnome Xmonad quebrado depois de atualizado para 14.10

3

Após a atualização para 14.10, o gnome-settings-daemon não pode ser carregado corretamente /usr/share/gnome-session/sessions/xmonad.session. Existe alguém com o mesmo problema?

    
por jianingy 25.10.2014 / 10:25

5 respostas

5

Aqui está uma solução mais detalhada baseada na resposta de Jianingy. Ele corrige alguns problemas que eu estava tendo após a atualização para o Ubuntu 14.10. Os problemas que estão sendo corrigidos incluem:

  • Teclas multimídia não funcionam
  • Configurações de exibição no Gnome-control-center não funcionando

Você precisa adicionar DesktopName=Unity a /usr/share/gnome-session/sessions/xmonad.session .

[GNOME Session]
Name=Xmonad/GNOME
RequiredComponents=gnome-settings-daemon;gnome-panel;xmonad
DesktopName=Unity

Além disso, com relação às alterações de dbus-send no Ubuntu 14.10, você precisa usar --print-reply=literal em vez de --print-reply=string . Eu adicionei isso ao meu xmonad.hs e eu defino main como 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]
    
por Marc Belmont 22.11.2014 / 23:45
1

OK, encontrei uma solução.

Primeiro de tudo, a partir de 14.10. Muitas configurações de aplicações unitárias e gnome (aquelas * .desktop em / usr / share / applications e / etc / xdg / autostart) começam a incluir um "OnlyShowIn = Unity". Portanto, temos que adicionar um desktopname = unity ao /usr/share/gnome-session/sessions/xmonad.session para permitir que esses aplicativos sejam executados.

Segundo, cmd 'dbus-send --print-reply = string' agora tem que ser 'dbus-send --print-reply = literal'. portanto, o antigo xmonad gnomeConfig não pode registrar o xmonad como um wm. nós temos que mudar o comando dbus-send de = string para = literal.

    
por jianingy 25.10.2014 / 14:28
1

A sintaxe --print-reply=string causa um erro. O nome do aplicativo que precisa ser "registrado" não é xmonad , mas xmonad.desktop . Acabei criando um arquivo ~/.xmonad/hooks com o seguinte comando:

dbus-send --session --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RegisterClient string:xmonad.desktop string:$DESKTOP_AUTO_START_ID

Também encontrei a correção anterior, definindo DesktopName=Unity para que o gnome-control-center seja usado corretamente.

    
por bewest 09.02.2015 / 10:22
0

Eu mencionei isto brevemente na essência, mas eu achei nos documentos do XMonad, que o gancho de inicialização é executado automaticamente dado, esta configuração:

, startupHook = execScriptHook "startup"

Isso faz com que o script de shell seja executado automaticamente, o que achei mais fácil do que capturar o haskell do macaco.

link

XMonad.Hooks.Script

Interface de Gancho de Script

Fornece uma interface simples para executar um script ~ / .xmonad / hooks com o nome de um gancho.

Sinopse

Uso

Este módulo permite que você execute um script localizado centralmente com o nome do texto de um gancho. Presume-se que o script esteja localizado em ~ / .xmonad / hooks.

Por exemplo, se você quisesse executar a inicialização do gancho em seu script toda vez que o gancho de inicialização fosse executado, você poderia modificar sua configuração do xmonad da seguinte forma:

main = xmonad $ defaultConfig { ... startupHook = execScriptHook "startup" ... } Agora, toda vez que o gancho de inicialização for executado, o comando ~/.xmonad/hooks startup também será.

por bewest 23.04.2015 / 02:20
0

Aqui está uma maneira muito simples de solucionar o problema "xmonad não registra" (abordada em outras respostas usando xmonad hooks ou escrevendo gnomeRegister2 ): no arquivo xmonad.desktop , substitua Exec=xmonad por Exec=sh -c "xmonad &" . Isso resulta em uma inicialização muito rápida - eu tenho a idéia aqui - mas pode quebrar outras coisas.

A parte DesktopName=Unity ainda é essencial.

UPDATE (16 de novembro de 2015)

Eu regularmente luto contra o XMonad + Gnome quando eu atualizo o Ubuntu. Meus arquivos de configuração são disponíveis no GitHub , no caso de alguém gostar de ver como eu recentemente fiz o XMonad e o Gnome jogarem legal juntos.

A partir de 16 de novembro de 2015, os arquivos importantes são

  • ~/.xsession : link
  • Gnome *.desktop arquivos: link (eu mantenho meu XMonad + Configuração do Gnome no meu diretório pessoal, sem precisar editar nenhum arquivo *.desktop do sistema; consulte minha instalação conf script para onde esses arquivos vão).
  • Gnome *.session file: link

Para o Ubuntu 15.04 e 15.10, a mudança mais importante e mais difícil de descobrir foi adicionar export XDG_CURRENT_DESKTOP=Unity ao meu ~/.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

Além disso, para receber notificações gráficas em, por exemplo, teclas de volume e ajuste de brilho da tela, eu precisava instalar o pacote notify-osd .

    
por ntc2 21.04.2015 / 22:53

Tags