업데이트(2015년 11월 16일)

업데이트(2015년 11월 16일)

14.10으로 업그레이드한 후 gnome-settings-daemon이 /usr/share/gnome-session/sessions/xmonad.session을 제대로 로드할 수 없습니다. 같은 문제 있는 사람 있어?

답변1

Jianingy 답변을 기반으로 한 보다 자세한 솔루션은 다음과 같습니다. Ubuntu 14.10으로 업그레이드한 후 발생한 몇 가지 문제를 해결합니다. 해결되는 문제는 다음과 같습니다.

  • 멀티미디어 키가 작동하지 않음
  • Gnome-control-center의 디스플레이 설정이 작동하지 않습니다.

DesktopName=Unity에 추가해야 합니다 /usr/share/gnome-session/sessions/xmonad.session.

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

또한 dbus-sendUbuntu 14.10의 변경 사항 --print-reply=literal과 관련하여 --print-reply=string. 나는 그것을 my에 추가했고 xmonad.hsmain을 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]

답변2

네, 해결책을 찾았습니다.

우선 14.10부터 시작합니다. 많은 Unity 및 gnome 애플리케이션 구성( /usr/share/applications 및 /etc/xdg/autostart 의 *.desktop )에는 "OnlyShowIn=Unity"가 포함되기 시작합니다. 따라서 해당 응용 프로그램을 실행하려면 /usr/share/gnome-session/sessions/xmonad.session에 Desktopname=unity를 추가해야 합니다.

둘째, cmd 'dbus-send --print-reply=string'은 이제 'dbus-send --print-reply=literal'이어야 합니다. 따라서 이전 xmonad gnomeConfig는 xmonad를 wm으로 등록할 수 없습니다. dbus-send 명령을 =string에서 =literal로 변경해야 합니다.

답변3

구문 --print-reply=string으로 인해 오류가 발생합니다. "등록"해야 하는 애플리케이션의 이름은 xmonad가 아니라 입니다 xmonad.desktop. ~/.xmonad/hooks다음 명령을 사용하여 파일을 만들었습니다 .

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

이전 수정 사항도 찾았으며 설정을 통해 가 제대로 사용되도록 DesktopName=Unity했습니다 .gnome-control-center

답변4

다음은 "xmonad 등록 실패" 문제를 해결하는 매우 간단한 방법입니다(xmonad 후크를 사용하거나 작성하여 다른 답변에서 해결됨 gnomeRegister2). xmonad.desktop파일 Exec=xmonad에서 Exec=sh -c "xmonad &". 그 결과 시작이 매우 빨라졌습니다. 아이디어가 생겼습니다.여기-- 하지만 다른 것들은 깨질 수도 있습니다.

DesktopName=Unity부분은 여전히 ​​필수적이다.

업데이트(2015년 11월 16일)

나는 Ubuntu를 업그레이드할 때 정기적으로 XMonad + Gnome과 싸웁니다. 내 구성 파일은GitHub에서 사용 가능, 제가 ​​가장 최근에 XMonad와 Gnome을 어떻게 함께 잘 플레이하게 했는지 알고 싶은 분이 계시다면.

2015년 11월 16일 기준으로 중요한 파일은 다음과 같습니다.

Ubuntu 15.04 및 15.10의 경우 가장 중요하면서도 가장 찾기 어려운 변경 사항은 export XDG_CURRENT_DESKTOP=Unitymy ~/.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

또한 볼륨 키 누르기, 화면 밝기 조정 등에 대한 그래픽 알림을 받으려면 패키지를 설치해야 했습니다 notify-osd.

관련 정보