Гном Xmonad сломан после обновления до 14.10
После обновления до 14.10 gnome-settings-daemon не может быть загружен надлежащим образом /usr/share/gnome-session/sessions/xmonad.session. есть у кого такая же проблема?
5 ответов
Вот более подробное решение, основанное на ответе 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 = 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]
- https://gist.github.com/bewest/46b849da04684f0ce401
- http://blog.ezyang.com/2014/12/ubuntu-utopic-upgrade-xmonad/comment-page-1/
--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
быть использованным должным образом.
ОК, я нашел решение.
Прежде всего, начиная с 14.10. Многие конфигурации приложений для Unity и GNOME (такие как *.desktop в / usr / share / Applications и /etc/xdg/autostart) начинают включать "OnlyShowIn=Unity". Поэтому мы должны добавить имя рабочего стола =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.
Вот очень простой способ обойти проблему "xmonad не удается зарегистрировать" (решается в других ответах с помощью перехватчиков xmonad или записи gnomeRegister2
): в xmonad.desktop
файл, заменить Exec=xmonad
с Exec=sh -c "xmonad &"
, Это приводит к очень быстрому запуску - у меня есть идея здесь - но это может сломать другие вещи.
DesktopName=Unity
часть по-прежнему важна.
ОБНОВЛЕНИЕ (16 ноября 2015 г.)
Я регулярно бьюсь с XMonad + Gnome, когда обновляю Ubuntu. Мои конфигурационные файлы доступны на GitHub, на случай, если кто-нибудь захочет узнать, как я недавно убедил XMonad и Gnome хорошо играть вместе.
По состоянию на 16 ноября 2015 года важные файлы
~/.xsession
: https://github.com/ntc2/conf/blob/master/dot.xsession- Гном
*.desktop
файлы: https://github.com/ntc2/conf/tree/master/dot.local/share/applications (я сохраняю свою конфигурацию XMonad + Gnome в моем домашнем каталоге, без необходимости редактировать какую-либо систему*.desktop
файлы; см. мой скрипт установки conf для того, где эти файлы идут). - Гном
*.session
файл: https://github.com/ntc2/conf/blob/master/dot.config/gnome-session/sessions/local-xmonad-session.session
Для 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
пакет.
Я кратко упомянул об этом в гисте, но я обнаружил в документации XMonad, что ловушка запуска выполняется автоматически, эта конфигурация:
, startupHook = execScriptHook "startup"
Это приводит к тому, что скрипт оболочки запускается автоматически, что, как мне показалось, проще, чем monkeypatching haskell hook.
http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-Script.html
XMonad.Hooks.Script
Интерфейс Script Hook
Предоставляет простой интерфейс для запуска сценария ~/.xmonad/hooks с именем ловушки.
конспект
использование
Этот модуль позволяет вам запускать централизованно расположенный скрипт с текстовым именем ловушки. Предполагается, что скрипт находится в ~/.xmonad/hooks.
Например, если вы хотите запускать ловушку запуска в вашем скрипте каждый раз, когда запускается ловушка запуска, вы можете изменить конфигурацию xmonad следующим образом:
main = xmonad $ defaultConfig {
...
startupHook = execScriptHook "startup"
...
}
Теперь каждый раз, когда запускается ловушка запуска, команда ~/.xmonad/hooks startup
будет тоже.