ОБНОВЛЕНИЕ (16 ноября 2015 г.)

ОБНОВЛЕНИЕ (16 ноября 2015 г.)

После обновления до 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-sendизменений в Ubuntu 14.10, вам нужно использовать --print-reply=literalвместо --print-reply=string. Я добавил это в свой xmonad.hsи определяю main как 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 (те самые *.desktop в /usr/share/applications и /etc/xdg/autostart) начинают включать "OnlyShowIn=Unity". Поэтому нам нужно добавить desktopname=unity в /usr/share/gnome-session/sessions/xmonad.session, чтобы разрешить запуск этих приложений.

Во-вторых, 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часть по-прежнему важна.

ОБНОВЛЕНИЕ (16 ноября 2015 г.)

Я регулярно борюсь с XMonad + Gnome, когда обновляю Ubuntu. Мои файлы конфигурациидоступно на GitHub, на случай, если кто-то захочет увидеть, как мне совсем недавно удалось заставить XMonad и Gnome прекрасно работать вместе.

По состоянию на 16 ноября 2015 года важными файлами являются:

Для 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.

Связанный контент