xmonad (Русский)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Состояние перевода: На этой странице представлен перевод статьи xmonad. Дата последней синхронизации: 14 сентября 2015. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Tango-preferences-desktop-locale-modified.pngПеревод этой статьи или раздела не отражает оригинальное содержание.Tango-preferences-desktop-locale-modified.png

Причина: Last updated in 2015 (402150), out of sync with English page (Discuss)


xmonad это тайловый оконный менеджер для X. Окна автоматически располагаются плиткой на экране без пробелов или перекрытия, максимально используя экранное место.

xmonad написан, настроен и расширяем на Haskell. Пользовательские алгоритмы компоновки, назначения клавиш и другие расширения могут быть написаны пользователем в файлах настройки.

Применение динамических шаблонов, на каждом рабочем столе можно использовать различные схемы. Xinerama полностью поддерживается, что позволяет размещать окна на нескольких физических экранах.

Для большей информации, пожалуйста посетите сайт xmonad: https://xmonad.org/

Установка

Установите пакет xmonad, и xmonad-contrib для использования разнообразных алгоритмов компоновки, настройки, скриптов, и т.д.

Как вариант, установите xmonad-gitAUR, разрабатываемая версия, с некоторыми дополнительными зависимостями; а также xmonad-contrib-gitAUR если хотите.

Запуск xmonad

С установленным Экранным менеджером

Выберите Xmonad из меню ссессий Экранного менеджера.

Без установленного экранного менеджера

Если установлен только Xmonad, без использования экранного менеджера (такого как KDE, Gnome и т.д.). Добавьте exec xmonad в ваш ~/.xinitrc файл а затем начните сеанс, выполнив startx .

Примечание: По умолчанию, xmonad не устанавливает курсор X, поэтому обычно отоброжается "крест" вместо курсора. Чтобы установить привычный курсор (стрелочка показывающая влево-вверх), добавьте следующую строку в ваш ~/.xinitrc (или ~/.xprofile если вы используете оконный менеджер): xsetroot -cursor_name left_ptr

В итоге (ссылаясь на вышописанное), рекомендуем добавить в ~/.xinitrc

setxkbmap -layout "us,ru" # Установит раскладки us и ru
setxkbmap -option "grp:caps_toggle,grp_led:scroll"
xsetroot -cursor_name left_ptr &
export PATH=~/bin:$PATH
exec xmonad

Настройка

Создайте каталог ~/.xmonad и файл ~/.xmonad/xmonad.hs, после чего отредактируйте этот файл, как описано ниже. После изменений, сделанных в ~/.xmonad/xmonad.hs, нажмите Mod+q, чтобы изменения вступили в силу.

Примечание: По умолчанию клавиша Mod - это Alt
Совет: Настройка по умолчанию для xmonad вполне удобна и полностью работает без файла xmonad.hs

Поскольку файл настройки xmonad написан на Haskell, не-программистам, возможно, будет сложно настраивать параметры. Для получения более подробных руководств и примеров настроек вы можете обратиться к следующим ресурсам:

Лучше всего помешать свои изменения и настройки только в ~/.xmonad/xmonad.hs и записывать все неустановленные параметры из файла настроек по умолчанию (defaultConfig).

Это делается путем записи в xmonad.hs:

 import XMonad
 
 main = xmonad defaultConfig
     { terminal    = "urxvt"
     , modMask     = mod4Mask
     , borderWidth = 3
     }

Это установит терминал по умолчанию (terminal = "urxvt") и ширину рамки в 3 пикселя (borderWidth = 3), оставляя все остальные настройки по умолчанию (унаследовав из XConfig значения defaultConfig (настроек по умолчанию)).

Примечание: Чтобы использовать urxvt, его нужно поставить: pacman -S rxvt-unicode

Это может быть удобно, когда используются сложные вещи, чтобы вызвать параметры настроек по имени функции внутри главной функции, и определить их отдельно в своих разделах вашего ~/.xmonad/xmonad.hs. Это расширит настройки вашей планировки и сделает сохранение, визуализацию и управление хуками легче.

Простой xmonad.hs можно было записать так:

 import XMonad

 main = do
   xmonad $ defaultConfig
     { terminal    = myTerminal
     , modMask     = myModMask
     , borderWidth = myBorderWidth
     }

 myTerminal    = "urxvt"
 myModMask     = mod4Mask -- Win клавиша (или Super_L)
 myBorderWidth = 3

Кроме того, установленные выше (main, myTerminal, myModMask и т.д.), в пределах {} не имеют значения в Haskell, пока не импортируются в первую очередь.

Ниже берется шаблон файла настроек 0.9. Этот пример из наиболее распространенных функций можно определить в свой основной блок (main = do).

 {
   terminal           = myTerminal,
   focusFollowsMouse  = myFocusFollowsMouse,
   borderWidth        = myBorderWidth,
   modMask            = myModMask,
   -- numlockMask deprecated in 0.9.1
   -- numlockMask        = myNumlockMask,
   workspaces         = myWorkspaces,
   normalBorderColor  = myNormalBorderColor,
   focusedBorderColor = myFocusedBorderColor,

   -- key bindings
   keys               = myKeys,
   mouseBindings      = myMouseBindings,

   -- hooks, layouts
   layoutHook         = myLayout,
   manageHook         = myManageHook,
   handleEventHook    = myEventHook,
   logHook            = myLogHook,
   startupHook        = myStartupHook
 }

Сам пакет также включает в себя xmonad.hs, последний использует официальный пример xmonad.hs, который поставляется с модулем Haskell 'xmonad' в качестве примера того, как всё это реализовать. Его не рекомендуется использоваться в качестве шаблона настроек, но он подойдёт в качестве примера. Можете взять часть кода для использования в собственной настройке. Он расположен в (зависит от версии архитектуры) каталоге /usr/share/ (или выполните для поиска find /usr/share -name xmonad.hs).

Базовая настройка Рабочего Стола

В xmonad-contrib лучшая настройка по умолчанию для обычных пользователей. Он также помогает с проблемами в некоторых современных программах, такие как Chromium

Добавьте это:

 import XMonad
 import XMonad.Config.Desktop

 baseConfig = desktopConfig

 main = xmonad baseConfig
     { terminal    = "urxvt"
     , modMask     = mod4Mask
     }

Выход xmonad

Для завершения текущей сессии xmonad session, нажмите Mod+Shift+Q.

Советы и приемы

X-Selection-Paste

Центральное управление клавиатурой в Xmonad может дополнительно поддерживать горячие клавиши X-Selection-Paste.

Кроме того, существует функция "pasteSelection" в XMonad.Util.Paste которая может быть связана с клавишей, используя строку:

xmonad.hs
  -- X-selection-paste buffer
  , ((0, xK_Insert), pasteSelection)

Нажатие клавиши "Insert" теперь будет вставлять "буфер мыши" в активном окне.

Горячие клавиши

Если вы используете Xmonad в качестве самостоятельного менеджера окон, вы можете редактировать xmonad.hs чтобы добавить горячие клавиши. Вам просто нужно найти имя клавиши XF86 (например как XF86PowerDown) посмотрите его в /usr/include/X11/XF86keysym.h. Это даст вам код клавиши (вроде 0x1008FF2A) который вы можете использовать, чтобы добавить строку, как в следующем разделе комбинации клавиш с вашим xmonad.hs:

((0,               0x1008FF2A), spawn "sudo pm-suspend")

Основные комбинации клавиш

Примечание: Если вы не переназначили Mod-клавишу. то (как говорилось выше) по умолчанию это Alt
Mod+Shift+Enter — запустить новый терминал.
Mod+Число — переключиться на N’ый рабочий стол.
Mod+Shift+Число — перенести окно на N’ый рабочий стол.
Mod+C — закрыть текущее окно.
Mod+Пробел — переключение между компоновками окон.
Mod+Shift+Пробел — использовать компоновку по умолчанию.
Mod+Enter — поменять местами текущее окно и первое (всегда главное).
Mod+Запятая — увеличить количество главных окон.
Mod+Точка — уменьшить количество главных окон.
Mod+H — уменьшить размер главной части.
Mod+L — увеличить размер главной части.
Mod+P — dmenu (удобный запуск программ).
Mod+Shift+P — gmrun (менее удобная альтернатива dmenu).
Mod+Tab или Mod+J — сделать активным следующее окно.
Mod+K — сделать активным предыдущее окно.
Mod+Shift+J — поменять местами текущее окно и следующее.
Mod+Shift+K — поменять местами текущее окно и предыдущее.
Mod+ЛКМ — перемещение окна с помощью мыши.
Mod+ПКМ — изменение размера окна с помощью мыши.
Mod+T — вернуть плавающее окно в мозаику.
Mod+Q — перезапустить Xmonad.
Mod+Shift+Q — закрыть Xmonad.

Дополнительные приложения

Есть ряд дополнительных приложений, которые хорошо работают с xmonad. Наиболее распространенные из них:

  • xmobar — Лёгкая строка состояния, написанная на Haskell.
http://projects.haskell.org/xmobar/ || xmobar, xmobar-gitAUR

Увеличение числа рабочих столов

По умолчанию, xmonad использует 9 рабочих столов. Вы можете увеличить это значение до 14 расширяя следующую строку:

xmonad.hs
-- (i, k) <- zip (XMonad.workspaces conf) [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9]
(i, k) <- zip (XMonad.workspaces conf) [xK_grave, xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0, xK_minus, xK_equal, xK_BackSpace]

Создание комнаты для Conky или приложений из трея

Оберните ваши макеты с avoidStruts из XMonad.Hooks.ManageDocks для автоматического dock/panel/trayer интервала:

 import XMonad
 import XMonad.Hooks.ManageDocks

 main=do
   xmonad $ defaultConfig
     { ...
     , layoutHook=avoidStruts $ layoutHook defaultConfig
     , manageHook=manageHook defaultConfig <+> manageDocks
     , ...
     }

Если вы хотите переключать интервалы, это действие можно добавить в клавиатурных назначениях:

,((modMask x, xK_b     ), sendMessage ToggleStruts)

Использование xmobar с xmonad

Merge-arrows-2.pngThis article or section is a candidate for merging with xmobar.Merge-arrows-2.png

Notes: Make use of the separate article available (Discuss in Talk:Xmonad (Русский))

xmobar это легкий и минималистичный текстовый бар, предназначенный для работы с xmonad. Для использования xmobar с xmonad, вам понадобятся два пакета, в дополнении к пакету xmonad. Эти пакеты xmonad-contrib и xmobar из официальных репозиториев, или воспользуйтесь xmobar-gitAUR из AUR вместо официального пакета xmobar.

Запустим xmobar внутри xmonad. Который перезагружает xmobar, когда вы запускаете xmonad. Откройте ~/.xmonad/xmonad.hs в вашем любимом текстовом редакторе и выберите один из двух следующих вариантов:

Быстрый, менее гибкий

Примечание: Существует также dzen2 который можно заменить на xmobar.

Общий импорт:

import XMonad
import XMonad.Hooks.DynamicLog

Xmobar запускает xmobar c изменёнными настройками, которые включает все варианты, описанные в #Подробные настройки.

main = xmonad =<< xmobar defaultConfig { modMask = mod4Mask {- или любая другая настройка здесь ... -}}

Подробные настройки

В xmonad(-contrib) 0.9, есть новая функция XMonad.Hooks.DynamicLog в statusBar. Она позволяет использовать свои настройки:

  • Команда вывода в бар
  • PP определяющий, что написано в бар
  • Сочетание клавиш для переключения/изменения промежутков бара

Ниже приведен пример как ей воспользоваться:

~/.xmonad/xmonad.hs
-- Импорт.
import XMonad
import XMonad.Hooks.DynamicLog

-- Основная функция.
main = xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig

-- Команда для запуска бара.
myBar = "xmobar"

-- Настройте пользовательские PP как вам нравится. Они определяют то, что пишется в бар..
myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" }

-- Назначение клавиш для переключения промежутков бара.
toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)

-- Главная настройка. Переопределите значения по умолчанию на свой вкус.
myConfig = defaultConfig { modMask = mod4Mask }

Проверка настройки XMobar

Шаблон xmobarrc по умолчанию содержит это. Откройте ~/.xmobarrc и убедитесь, что у вас есть StdinReader в шаблоне, и запустите плагин, например:

~/.xmobarrc
Config { ...
       , commands = [ Run StdinReader .... ]
         ...
       , template = " %StdinReader% ... "
       }

Теперь, все что вам придется сделать, - это запустить, или перезапустить xmonad.

Совет: Для перезапуска xmonad, выполните xmonad --restart

Управление xmonad внешними скриптами

Вот несколько способов сделать это:

  • Эмулируйте нажатия клавиш, используя xdotool или аналогичные программы. Смотрите тут Ubuntu forums thread. Следующая команда будет имитировать нажатие Super+n:
xdotool key Super+n
  • wmctrl -Если у вас есть desktopConfig или написан EwmhDesktops, то это очень простая в использовании стандартная утилита.

Запуск другого оконного менеджера с xmonad

Если вы используете xmonad-gitAUR, с Января 2011, вы можете перезапустить xmonad с другим оконным менеджером. Вам просто нужно написать небольшой скрипт и добавить в ~/.xmonad/xmonad.hs. Вот этот скрипт:

~/bin/obtoxmd
#!/bin/sh
openbox
xmonad

А вот поправки, которые нужно добавить к вашему ~/.xmonad/xmonad.hs:

~/.xmonad/xmonad.hs
import XMonad
--You need to add this import
import XMonad.Util.Replace

main do
    -- And this "replace"
    replace
    xmonad $ defaultConfig
    {
    --Add the usual here
    }

Также нужно добавить привязку клавиш:

~/xmonad/xmonad.hs
--Add a keybinding as follows:
((modm .|. shiftMask, xK_o     ), restart "/home/abijr/bin/obtoxmd" True)

Только не забудьте добавить запятую перед или после, а также изменить путь к реальному пути скрипта. Нажмите Mod+q (перезапустите xmonad с обновлёнными настройками), затем Mod+Shift+o, и вы должны получить работающий Openbox с теми же открытыми окнами, что и в xmonad. Чтобы вернуться к xmonad, просто выйдите из Openbox. Вот ссылка на файл ~/.xmonad/xmonad.hs от adamvo, который использует эту установку: Adamvo's xmonad.hs.

KDE и xmonad

В Вики xmonad есть инструкции о том, как запустить xmonad внутри KDE

Будет хорошей идеей установить глобальное сочетание клавиш KDE при запущенном xmonad, в случае, если он случайно будет закрыт или "убит".

IM слой для Skype

Чтобы создать IM слой для новой версии skype, используйте следующий код:

xmonad.hs
myIMLayout = withIM (1%7) skype Grid
    where
      skype = And (ClassName "Skype") (Role "")

Примеры настроек

Ниже приведены несколько примеров настроек от пользователей xmonad. Не стесняйтесь добавлять ссылки на свои файлы настроек.

  • brisbin33 :: simple, useful, readable :: config screenshot
  • jelly :: Configuration with prompt, different layouts, twinview with xmobar :: xmonad.hs
  • MrElendig :: Simple configuration, with xmobar :: xmonad.hs, .xmobarrc, screenshot.
  • thayer :: A minimal mouse-friendly config ideal for netbooks :: configs screenshot
  • vicfryzel :: Beautiful and usable xmonad configuration, along with xmobar configuration, xinitrc, dmenu, and other scripts that make xmonad more usable. :: git repository, screenshot.
  • vogt :: Check out adamvo's config and many others in the official Xmonad/Config archive
  • wulax :: Example of using xmonad inside Xfce. Contains two layouts for GIMP. :: xmonad.hs, screenshot.

Решение проблем

GNOME 3 и xmonad

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Это больше не работает с GNOME. Но по-прежнему может работать с GNOME Flashback. (Discuss in Talk:Xmonad (Русский))

С выпуском GNOME 3 custom GNOME sessions потребуются дополнительные действия, чтобы сделать из GNOME и xmonad конфетку.

Добавьте сессию xmonad в файл используемый gnome-session (/usr/share/gnome-session/sessions/xmonad.session):

[GNOME Session]
Name=Xmonad session
RequiredComponents=gnome-panel;gnome-settings-daemon;
RequiredProviders=windowmanager;notifications;
DefaultProvider-windowmanager=xmonad
DefaultProvider-notifications=notification-daemon

Создайте файл для рабочего стола GDM (/usr/share/xsessions/xmonad-gnome-session.desktop):

[Desktop Entry]
Name=Xmonad GNOME
Comment=Tiling window manager
TryExec=/usr/bin/gnome-session
Exec=gnome-session --session=xmonad
Type=XSession

Создайте или отредактируйте этот файл (/usr/share/applications/xmonad.desktop):

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Xmonad
Exec=xmonad
NoDisplay=true
X-GNOME-WMName=Xmonad
X-GNOME-Autostart-Phase=WindowManager
X-GNOME-Provides=windowmanager
X-GNOME-Autostart-Notify=false

В конце концов, установите xmonad-contrib и создайте или отредактируйте ~/.xmonad/xmonad.hs со следующим содержимым:

import XMonad
import XMonad.Config.Gnome

main = xmonad gnomeConfig

Теперь Xmonad должен появиться в списке сеансов GDM, а также будет работать с gnome-session.

Композитный Xmonad и Gnome

Некоторые приложения выглядят лучше (например GNOME Do) когда включен композитный режим. Это, однако, не задействовано в оконном менеджере Xmonad по умолчанию. Чтобы включить его, добавьте дополнительный .desktop файл /usr/share/xsessions/xmonad-gnome-session-composite.desktop:

[Desktop Entry]
Name=Xmonad GNOME (Composite)
Comment=Tiling window manager
TryExec=/usr/bin/gnome-session
Exec=/usr/sbin/gnome-xmonad-composite
Type=XSession

И создайте /usr/sbin/gnome-xmonad-composite и chmod +x /usr/sbin/gnome-xmonad-composite:

xcompmgr &
gnome-session --session=xmonad

Теперь выберите "Xmonad GNOME (Composite)" в списке сеансов, во время входа в систему. Посмотрите xcompmgr(1) для дополнительных настроек "радующих глаз".

Xfce 4 и xmonad

Используйте xfceConfig вместо defaultConfig после импорта XMonad.Config.Xfce в ~/.xmonad/xmonad.hs, например адаптируем минимальную настройку свыше:

import XMonad
import XMonad.Config.Xfce
main = xmonad xfceConfig
    { terminal    = "urxvt"
    , modMask     = mod4Mask
    }

Также добавьте запись в Настройки > Session and Startup > Application Autostart чтобы выполнить xmonad --replace.

Отсутствует xmonad-i386-linux или xmonad-x86_64-linux

Xmonad автоматически создаёт xmonad-i386-linux файл (в ~/.xmonad/). Если это не так, возьмите файл настройки из xmonad wiki или создайте свой own. Положите .hs и все другие файлы в ~/.xmonad/ и запустите эту команду из папки:

xmonad --recompile

Теперь вы должны увидеть файл.

Примечание: Вы можете получить сообщение об ошибке, что xmonad-x86_64-linux не найден потому что xmonad-contrib не установлен.

Проблемы с приложениями Java

Если у вас есть проблемы, с приложениями Java, - окна не меняют размер, или меню сразу закрывается после вызова, смотрите Java#Приложения не изменяют размер с WM, меню сразу закрывается.

Пустое пространство в нижней части окон gVim или терминалов

Решение, меняющее цвет пространства на цвет фона, можно найти в разделе Vim (Русский)#Пустое пространство в нижней части окон gVim.

В случае с rxvt-unicode можно воспользоватся пакетом rxvt-unicode-patchedAUR.

Также можно заставить xmonad соблюдать размер, но из-за этого может появиться зазор. Смотрите документацию по Xmonad.Layout.LayoutHints.

Chromium/Chrome не работает полноэкранно

Если Chromium/Chrome не может перейти в полноэкранный режим по нажатию F11, воспользуйтесь XMonad.Hooks.EwmhDesktops расширением из пакета xmonad-contrib. Просто добавьте import строчку в ваш ~/.xmonad/xmonad.hs:

import XMonad.Hooks.EwmhDesktops

а затем добавьте handleEventHook = fullscreenEventHook в соответствующее место; например:

...
        xmonad $ defaultConfig
            { modMask            = mod4Mask
            , handleEventHook    = fullscreenEventHook
            }
...

После перекомпиляции / перезагрузки xmonad, Chromium теперь должен ответить на F11 (полноэкранный режим) как положено.

Multitouch / touchegg

Touchégg polls the window manager for the _NET_CLIENT_LIST (in order to fetch a list of windows it should listen for mouse events on.) По умолчанию, xmonad не поддерживает это свойство. Чтобы это включить, воспользуйтесь XMonad.Hooks.EwmhDesktops расширением из пакета xmonad-contrib.

Назначение клавиш с раскладкой клавиатуры azerty

Пользователи использующие клавиатуру с раскладкой "azerty" могут столкнуться с проблемами при использовании сочетаний клавиш. Воспользуйтесь XMonad.Config.Azerty модулем для решения проблемы.

GNOME 3 mod4+p изменение настройки отображения вместо запуска dmenu

Если вам не нужна возможность переключения "display-setup" в "gnome-control-center", просто выполните

dconf write /org/gnome/settings-daemon/plugins/xrandr/active false

в качестве пользователя, чтобы отключить плагин, который захватывает Super+p.

Проблемы с фокусировкой границы окна в VirtualBox

Известная проблема с Virtualbox (Ticket #6479) может вызвать проблемы с фокусировкой границы окна. Решение может быть найдено путем установки композитного менеджера, как xcompmgr который отменяет некорректное поведение.

Игры из Steam (Half-Life, Left 4 Dead, …) и xmonad

Бывают проблемы с играми на движке "Source" (например Half-Life). Если они не запускаются или зависли с черным экраном, - обойдите эту проблему, запустив игру в оконном режиме: щелкните правой кнопкой мыши на игре в вашей библиотеке и выберите "свойства". Нажмите на параметры запуска и введите: [1]

-windowed

Другим решением является плавающее окно игры с помощью хука управления. Например, следующая строка может быть использована для Half-Life:

 className =? "hl_linux" --> doFloat

Это также может работать, обратив внимание XMonad на EWMH, и в том числе полноэкранным хуком: [2]

  main = xmonad $ ewmh defaultConfig{ handleEventHook =
           handleEventHook defaultConfig <+> fullscreenEventHook }

Это даёт несколько другой эффект, и делает его поведение больше похожим на полноэкранное приложение в других оконных менеджерах.

LibreOffice - фокус перескакивает между главным окном и диалогом

По умолчанию пользовательский интерфейс LibreOffice использует "движок" gtk в обход окружения рабочего стола. Это может вызвать проблемы с некоторыми настройками xmonad. Такие настройки приводят к быстро скачущему фокусу между главным окном LibreOffice и любым открытым окном диалога LibreOffice, эффективно "запирая" приложение... В этом случае переменная среда SAL_USE_VCLPLUGIN может заставить LibreOffice использовать другую тему пользовательского интерфейса, как указано в LibreOffice#Theme Например:

  export SAL_USE_VCLPLUGIN=gen lowriter

Использует общий (QT) UI.

Смотрите также

Cтатьи на Русском:

Cтатьи на Английском: