更新 (2015 年 11 月 16 日)

更新 (2015 年 11 月 16 日)

14.10 にアップグレードした後、gnome-settings-daemon を /usr/share/gnome-session/sessions/xmonad.session に正しくロードできません。同じ問題を抱えている人はいますか?

答え1

Jianingy の回答に基づいた、より詳細な解決策を以下に示します。Ubuntu 14.10 にアップグレードした後に発生したいくつかの問題を修正します。修正される問題は次のとおりです。

  • マルチメディアキーが機能しない
  • Gnome コントロール センターの表示設定が機能しない

DesktopName=Unityを追加する必要があります/usr/share/gnome-session/sessions/xmonad.session

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

また、Ubuntu 14.10 の変更点として、の代わりにdbus-sendを使用する必要があります。これを my に追加し、 main を として定義しました。--print-reply=literal--print-reply=stringxmonad.hsmain = 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 を追加する必要があります。

次に、コマンド 'dbus-send --print-reply=string' は、'dbus-send --print-reply=literal' に変更する必要があります。したがって、古い xmonad gnomeConfig は xmonad を wm として登録できません。dbus-send コマンドを =string から =literal に変更する必要があります。

答え3

構文--print-reply=stringによりエラーが発生します。登録する必要があるアプリケーションの名前は ではなく ですxmonadxmonad.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=Unitygnome-control-center適切に使用されるようになります。

答え4

「xmonad が登録に失敗する」問題を回避する非常に簡単な方法があります (他の回答では、xmonad フックを使用するか、 を記述することで対処されていますgnomeRegister2)。ファイルで、を にxmonad.desktop置き換えます。これにより、起動が非常に速くなります。アイデアはわかりました。Exec=xmonadExec=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=Unity次のものを追加することでした~/.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

関連情報