Pull to refresh

IceWM — берём в руки напильник

Привет, Хабр!
Уже не первый год я использую дистрибутив ArchLinux, но совсем недавно я заинтересовался малоизвестными wm(window manger). Раньше я использовал kde, а когда нужна была производительность — openbox.
Я случайно наткнулся на IceWM пару месяцев назад, поставил, ужаснулся, удалил. Но неделю назад руки таки дошли до настройки этого менеджера окон. Но хватит повествования, под катом вы найдёте инструкцию по установке и настройке IceWM.

Часть первая. Установка IceWM


Так как я использую ArchLinux, все операции буду проводить в нём. В общем, название пакетов почти не отличается.

Для начала давайте обновим нашу систему:

pacman -Syu


Выполняйте команду «pacman» либо от суперпользователя(root), либо с использованием «sudo».

Теперь мы поставим сам IceWM

pacman -S icewm


Сейчас нам нужно скопировать общие настройки в папку пользователя, чтобы каждый пользователь мог настроить под себя.

Выполняйте эти команды от обычного пользователя, а не от root.
mkdir ~/.icewm/
cp -R /usr/share/icewm/* ~/.icewm/


Часть вторая. Настройка


Рассмотрим файлы настройки icewm:
  • preferences содержит параметры управления поведением IceWM.
  • menu содержит пункты и структуру главного меню.
  • keys содержит дополнительные комбинации клавиш пользователя.
  • toolbar содержит кнопки запуска приложений на панели задач.
  • winoptions содержит параметры отвечающие за поведение отдельных приложений, описанных пользователем.
  • theme содержит название текущей темы оформления.
  • startup исполняемый файл, запускающийся во время первоначальной загрузки оконного менеджера.
  • shutdown исполняемый файл, запускающийся во время завершения работы оконного менеджера.


Для того что бы система была совсем лёгкой установим менеджер входа Slim.

pacman -S slim


И пропишем в ~/.xinitrc вашего пользователя следующее:

exec ck-launch-session dbus-launch icewm-session


И добавим slim в rc.conf:

nano /etc/rc.conf

DAEMONS=( ...  slim ...)


Теперь после перезагрузки и ввода логина/пароля вы увидите вот такой рабочий стол:



Не очень, правда? Хотя для 97 года шик. Давайте же настроим это чудо.

Для начала поставим пакет icewm-themes

pacman -S icewm-themes


Теперь в меню-настройки-темы у нас довольно большое количество тем, так же на box-look.org есть множество тем.

Перейдём к кофигам. Начнём мы с файла «menu».
Лично я пользуюсь утилитой «archlinux-xdg-menu», которая создаёт вполне качественное меню. Вот как ель пользоваться:
Сначала установим:
archlinux-xdg-menu

Потом генерируем меню:
xdg_menu --format icewm --fullmenu --root-menu /etc/xdg/menus/arch-applications.menu > ~/.icewm/menu


Всё, у нас есть полноценное меню из ваших приложений.

Следующий файл — «keys»
Все файлы очень хорошо документированы. Порядок настройки горячих клавишей таков:

key "сочетание клавиш" приложение или скрипт


Например:

key "Alt+t" thunar


При нажатии на Alt+t у нас запуститься файловый менеджер thunar. «Alt», «Ctrl», «Shift» так и прописываются в конфиге, а вот кнопка с логотипом Windows называется «Super».

Следующий файл — «toolbar»

Добавить программу в панель можно вот таки способом:

prog "название" иконка программа 


К примеру:

prog "Opera" opera.png opera 


Следующий файл у нас — «winoptions»

Строковые опции:

icon — Название иконки.
geometry — Положение окна. Обязателен unix подобный способ описания: [=][{xX}][{+-}{+-}].

Числовые опции:

workspace — назначить приложению воркспейс (начинается с 0)

Опции, имеющие фиксированный набор значений:

layer:
Desktop — Рабочий стол. Может быть только один.
Below — Слой под Normak.
Normal — Обычный
OnTop — Верхний.
Menu — слой для меню

tray:
Ignore — Не добавлять иконку в трей.
Minimized — Добавить иконку, убирать из панели задач, когда окно свёрнуто
Exclusive — Добавить иконку в трей и не показывать на панели задач.

Булевы опции:

llWorkspaces — если значение 1, приложение будет видено на всех воркспейсах
ignoreWinList — если значение 1, приложение не будет показываться в списке приложений
ignoreTaskBar — если значение 1, приложение не будет показываться на панели задач
ignoreQuickSwitch — если значение 1, приложение не будет переключаться по Alt+Tab.
fMove — если значение 0, приложение не будет двигаться.
fResize — если значение 0, приложение не будет изменять размер.
fClose — Iесли значение 0, приложение не будет закрываться.
fMinimize — если значение 0, приложение не будет сворачиваться.
fMaximize — если значение 0, приложение не будет разворачиваться на весь экран.
fHide — если значение 0, приложение не будет скрытым
dTitleBar — если значение 0, приложение не будет иметь верхний бар.
dSysMenu -если значение 0, приложение не будет иметь меню.
dBorder — если значение 0, приложение не будет отображать границу.
dClose — если значение 0, приложение не будет отображать кнопку закрытия.
dMinimize — если значение 0, приложение не будет отображать кнопку свернуть
dMaximize — если значение 0, приложение не будет отображать кнопку развернуть.
dDepth
ignorePositionHint
doNotFocus
startFullscreen
startMinimized
startMaximized
startMaximizedVert
startMaximizedHorz
nonICCCMconfigureRequest
noFocusOnMap

Следующий файл у нас — «preferences»

Это основной файл настройки.

Булевы опции:

ClickToFocus — Focus windows by clicking.
FocusOnAppRaise — Focus windows when application requests to raise.
RequestFocusOnAppRaise — Request focus (flashing in taskbar) when application requests raise.
RaiseOnFocus — Raise windows when focused.
FocusOnClickClient — Focus window when client area clicked.
RaiseOnClickClient — Raise window when client area clicked.
RaiseOnClickTitleBar — Raise window when title bar is clicked.
RaiseOnClickButton — Raise window when frame button is clicked.
RaiseOnClickFrame — Raise window when frame border is clicked.
LowerOnClickWhenRaised — Lower the active window when clicked again.
PassFirstClickToClient — Pass focusing click on client area to client.
FocusChangesWorkspace — Change to the workspace of newly focused windows.
FocusOnMap — Focus normal window when initially mapped.
FocusOnMapTransient — Focus dialog window when initially mapped.
FocusOnMapTransientActive — Focus dialog window when initially mapped only if parent frame focused.
MapInactiveOnTop — Put new windows on top even if not focusing them.
PointerColormap — Colormap focus follows pointer.
DontRotateMenuPointer — Don't rotate the cursor for popup menus.
LimitSize — Limit size of windows to screen.
LimitPosition — Limit position of windows to screen.
LimitByDockLayer — Let the Dock layer limit the workspace (incompatible with GNOME Panel).
ConsiderHBorder — Consider border frames when maximizing horizontally.
ConsiderVBorder — Consider border frames when maximizing vertically.
CenterMaximizedWindows — Center maximized windows which can't fit the screen (like terminals).
SizeMaximized — Maximized windows can be resized.
ShowMoveSizeStatus — Show position status window during move/resize.
ShowWorkspaceStatus — Show name of current workspace while switching.
MinimizeToDesktop — Display mini-icons on desktop for minimized windows.
MiniIconsPlaceHorizontal — Place the mini-icons horizontal instead of vertical.
MiniIconsRightToLeft — Place new mini-icons from right to left.
MiniIconsBottomToTop — Place new mini-icons from bottom to top.
StrongPointerFocus — Always maintain focus under mouse window (makes some keyboard support non-functional or unreliable).
OpaqueMove — Opaque window move.
OpaqueResize — Opaque window resize.
ManualPlacement — Windows initially placed manually by user.
SmartPlacement — Smart window placement (minimal overlap).
CenterTransientsOnOwner — Center dialogs on owner window.
MenuMouseTracking — Menus track mouse even with no mouse buttons held.
AutoRaise — Auto raise windows after delay.
DelayPointerFocus — Delay pointer focusing when mouse moves.
Win95Keys — Support win95 keyboard keys (Penguin/Meta/Win_L,R shows menu).
ModSuperIsCtrlAlt — Treat Super/Win modifier as Ctrl+Alt.
UseMouseWheel — Support mouse wheel.
ShowPopupsAbovePointer — Show popup menus above mouse pointer.
ReplayMenuCancelClick — Send the clicks outside menus to target window.
QuickSwitch — Alt+Tab window switching.
QuickSwitchToMinimized — Alt+Tab to minimized windows.
QuickSwitchToHidden — Alt+Tab to hidden windows.
QuickSwitchToAllWorkspaces — Alt+Tab to windows on other workspaces.
QuickSwitchGroupWorkspaces — Alt+Tab: group windows on current workspace.
QuickSwitchAllIcons — Show all reachable icons when quick switching.
QuickSwitchTextFirst — Show the window title above (all reachable) icons.
QuickSwitchSmallWindow — Attempt to create a small QuickSwitch window (1/3 instead of 3/5 of screen width).
QuickSwitchMaxWidth — Go trough all window titles and choose width of the longest one.
QuickSwitchVertical — Place the icons and titles vertical instead of horizontal.
QuickSwitchHugeIcon — Show the huge (48x48) of the window icon for the active window.
QuickSwitchFillSelection — Fill the rectangle highlighting the current icon.
GrabRootWindow — Manage root window (EXPERIMENTAL — normally enabled!).
SnapMove — Snap to nearest screen edge/window when moving windows.
EdgeSwitch — Workspace switches by moving mouse to left/right screen edge.
HorizontalEdgeSwitch — Workspace switches by moving mouse to left/right screen edge.
VerticalEdgeSwitch — Workspace switches by moving mouse to top/bottom screen edge.
ContinuousEdgeSwitch — Workspace switches continuously when moving mouse to screen edge.
AutoReloadMenus — Reload menu files automatically.
ShowTaskBar — Show task bar.
TaskBarAtTop — Task bar at top of the screen.
TaskBarKeepBelow — Keep the task bar below regular windows.
TaskBarAutoHide — Auto hide task bar after delay.
TaskBarShowClock — Show clock on task bar.
TaskBarShowAPMStatus — Show APM/ACPI/Battery/Power status monitor on task bar.
TaskBarShowAPMTime — Show APM status on task bar in time-format.
TaskBarShowMailboxStatus — Show mailbox status on task bar.
TaskBarMailboxStatusBeepOnNewMail — Beep when new mail arrives.
TaskBarMailboxStatusCountMessages — Count messages in mailbox.
TaskBarShowWorkspaces — Show workspace switching buttons on task bar.
TaskBarShowWindows — Show windows on the taskbar.
TaskBarShowShowDesktopButton — Show 'show desktop' button on taskbar.
ShowEllipsis — Show Ellipsis in taskbar items.
TaskBarShowTray — Show windows in the tray.
TrayShowAllWindows — Show windows from all workspaces on tray.
TaskBarShowTransientWindows — Show transient (dialogs, ...) windows on task bar.
TaskBarShowAllWindows — Show windows from all workspaces on task bar.
TaskBarShowWindowIcons — Show icons of windows on the task bar.
TaskBarShowStartMenu — Show 'Start' menu on task bar.
TaskBarShowWindowListMenu — Show 'window list' menu on task bar.
TaskBarShowCPUStatus — Show CPU status on task bar (Linux & Solaris).
TaskBarShowNetStatus — Show network status on task bar (Linux only).
TaskBarShowCollapseButton — Show a button to collapse the taskbar.
TaskBarDoubleHeight — Use double-height task bar.
TaskBarWorkspacesLeft — Place workspace pager on left, not right.
TaskBarLaunchOnSingleClick — Execute taskbar applet commands (like MailCommand, ClockCommand, ...) on single click.
ClientWindowMouseActions — Allow mouse actions on client windows (buggy with some programs).
ShowProgramsMenu — Show programs submenu.
ShowSettingsMenu — Show settings submenu.
ShowFocusModeMenu — Show focus mode submenu.
ShowThemesMenu — Show themes submenu.
ShowLogoutMenu — Show logout submenu.
ShowHelp — Show the help menu item.
ShowLogoutSubMenu — Show logout submenu.
ShowAbout — Show the about menu item.
ShowRun — Show the run menu item.
ShowWindowList — Show the window menu item.
AllowFullscreen — Allow to switch a window to fullscreen.
DisableImlibCaches — Disable Imlib's image/pixmap caches.
EnableAddressBar — Enable address bar functionality in taskbar.
ShowAddressBar — Show address bar in task bar.
MultiByte — Overrides automatic multiple byte detection.
ConfirmLogout — Confirm logout.
ShapesProtectClientWindow — Don't cut client windows by shapes set trough frame corner pixmap.
DoubleBuffer — Use double buffering when redrawing the display.

Числовые опции (в скобках указан диапазон значений):

ClickMotionDistance (0, 32) — Pointer motion distance before click gets interpreted as drag.
ClickMotionDelay (0, 2000) — Delay before click gets interpreted as drag.
MultiClickTime (0, 5000) — Multiple click time.
MenuActivateDelay (0, 5000) — Delay before activating menu items.
SubmenuMenuActivateDelay (0, 5000) — Delay before activating menu submenus.
MenuMaximalWidth (0, 16384) — Maximal width of popup menus, 2/3 of the screen's width if set to zero.
ToolTipDelay (0, 5000) — Delay before tooltip window is displayed.
ToolTipTime (0, 60000) — Time before tooltip window is hidden (0 means never.
AutoHideDelay (0, 5000) — Delay before task bar is hidden.
AutoShowDelay (0, 5000) — Delay before task bar is shown.
AutoRaiseDelay (0, 5000) — Delay before windows are auto raised.
EdgeResistance (0, 10000) — Resistance in pixels when trying to move windows off the screen (10000 = infinite).
PointerFocusDelay (0, 1000) — Delay for pointer focus switching.
SnapDistance (0, 64) — Distance in pixels before windows snap together.
EdgeSwitchDelay (0, 5000) — Screen edge workspace switching delay.
ScrollBarStartDelay (0, 5000) — Inital scroll bar autoscroll delay.
ScrollBarDelay (0, 5000) — Scroll bar autoscroll delay.
AutoScrollStartDelay (0, 5000) — Auto scroll start delay.
AutoScrollDelay (0, 5000) — Auto scroll delay.
WorkspaceStatusTime (0, 2500) — Time before workspace status window is hidden.
UseRootButtons (0, 255) — Bitmask of root window button click to use in window manager.
ButtonRaiseMask (0, 255) — Bitmask of buttons that raise the window when pressed.
DesktopWinMenuButton (0, 20) — Desktop mouse-button click to show the window list menu.
DesktopWinListButton (0, 20) — Desktop mouse-button click to show the window list.
DesktopMenuButton (0, 20) — Desktop mouse-button click to show the root menu.
TitleBarMaximizeButton (0, 5) — TitleBar mouse-button double click to maximize the window.
TitleBarRollupButton (0, 5) — TitleBar mouse-button double click to rollup the window.
MsgBoxDefaultAction (0, 1) — Preselect to Cancel (0) or the OK (1) button in message boxes.
MailCheckDelay (0, 3600*24) — Delay between new-mail checks. (seconds).
TaskBarCPUSamples (2, 1000) — Width of CPU Monitor.
TaskBarCPUDelay (10, 60*60*1000) — Delay between CPU Monitor samples in ms.
TaskBarNetSamples (2, 1000) — Width of Net Monitor.
TaskBarNetDelay (10, 60*60*1000) — Delay between Net Monitor samples in ms.
TaskbarButtonWidthDivisor (1, 25) — default number of tasks in taskbar.
XineramaPrimaryScreen (0, 63) — Primary screen for xinerama (taskbar, ...).
FocusRequestFlashTime (0, 3600*24) — Number of seconds the taskbar app will blink when requesting focus.
NestedThemeMenuMinNumber (0, 1234) — Minimal number of themes after which the Themes menu becomes nested (0=disabled).
BatteryPollingPeriod (2, 3600) — Delay between power status updates (seconds).

Строковые опции:

IconPath — Icon search path (colon separated).
MailBoxPath — Mailbox path (use $MAIL instead).
MailCommand — Command to run on mailbox.
MailClassHint — WM_CLASS to allow runonce for MailCommand.
NewMailCommand — Command to run when new mail arrives.
LockCommand — Command to lock display/screensaver.
ClockCommand — Command to run on clock.
ClockClassHint — WM_CLASS to allow runonce for ClockCommand.
RunCommand — Command to select and run a program.
TerminalCommand — Terminal emulator must accept -e option…
LogoutCommand — Command to start logout.
LogoutCancelCommand — Command to cancel logout.
ShutdownCommand — Command to shutdown the system.
RebootCommand — Command to reboot the system.
CPUStatusCommand — Command to run on CPU status.
CPUStatusClassHint — WM_CLASS to allow runonce for CPUStatusCommand.
NetStatusCommand — Command to run on Net status.
NetStatusClassHint — WM_CLASS to allow runonce for NetStatusCommand.
AddressBarCommand — Command to run for address bar entries.
NetworkStatusDevice — Network device to show status for.
TimeFormat — Clock Time format (strftime format string).
TimeFormatAlt — Alternate Clock Time format (e.g. for blinking effects).
DateFormat — Clock Date format for tooltip (strftime format string).
AcpiIgnoreBatteries — List of battery names (directories) in /proc/acpi/battery to ignore. Useful when more slots are built-in, but only one battery is used.
WinMenuItems — Items supported in menu window (rmsnxfhualytickw).
WorkspaceNames — List of workspace names, for example WorkspaceNames=«1»,«2»,«3»,«4».
OpenCommand

Привязки клавиш:

MouseWinMove — Mouse binding for window move.
MouseWinSize — Mouse binding for window resize.
MouseWinRaise — Mouse binding to raise window.
KeyWinRaise
KeyWinOccupyAll
KeyWinLower
KeyWinClose
KeyWinRestore
KeyWinPrev
KeyWinNext
KeyWinMove
KeyWinSize
KeyWinMinimize
KeyWinMaximize
KeyWinMaximizeVert
KeyWinMaximizeHoriz
KeyWinFullscreen
KeyWinHide
KeyWinRollup
KeyWinMenu
KeyWinArrangeN
KeyWinArrangeNE
KeyWinArrangeE
KeyWinArrangeSE
KeyWinArrangeS
KeyWinArrangeSW
KeyWinArrangeW
KeyWinArrangeNW
KeyWinArrangeC
KeySysSwitchNext
KeySysSwitchLast
KeySysWinNext
KeySysWinPrev
KeySysWinMenu
KeySysDialog
KeySysMenu
KeySysWindowList
KeySysWinListMenu
KeySysAddressBar
KeySysWorkspacePrev
KeySysWorkspaceNext
KeySysWorkspaceLast
KeySysWorkspacePrevTakeWin
KeySysWorkspaceNextTakeWin
KeySysWorkspaceLastTakeWin
KeySysWorkspace1
KeySysWorkspace2
KeySysWorkspace3
KeySysWorkspace4
KeySysWorkspace5
KeySysWorkspace6
KeySysWorkspace7
KeySysWorkspace8
KeySysWorkspace9
KeySysWorkspace10
KeySysWorkspace11
KeySysWorkspace12
KeySysWorkspace1TakeWin
KeySysWorkspace2TakeWin
KeySysWorkspace3TakeWin
KeySysWorkspace4TakeWin
KeySysWorkspace5TakeWin
KeySysWorkspace6TakeWin
KeySysWorkspace7TakeWin
KeySysWorkspace8TakeWin
KeySysWorkspace9TakeWin
KeySysWorkspace10TakeWin
KeySysWorkspace11TakeWin
KeySysWorkspace12TakeWin
KeySysTileVertical
KeySysTileHorizontal
KeySysCascade
KeySysArrange
KeySysArrangeIcons
KeySysMinimizeAll
KeySysHideAll
KeySysUndoArrange
KeySysShowDesktop
KeySysCollapseTask

Теперь, когда вы знаете какие файлы за что отвечают, какие есть переменные, вы с лёгкостью сможете настроить IceWm
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.