источник:
http://avreg.net/howto_icewm.html
В статье рассматривается один из вариантов
установки лёгкого оконного менеджера IceWM и его начальной настройки для создания графического рабочего стола (десктопа) «одного приложения».
Такая конфигурация может быть
полезна при подготовке промышленных или служебных рабочих станций (операторы, кассиры, диспетчеры, охранники, и т.п.), в которых основные приложения работают в «графике».
Итого, нужно следующее:
-
система должна автоматически загружаться без участия пользователя и запускать основное рабочее приложение;
-
в системе не должно быть посторонних программ, кроме основной программы рабочего места и программ, необходимых для администрирования.
Рекомендуется что базовая система также удовлетворяет требованиям разумного минимализма (общее правило: больше возможностей и функций - больше дыр) (см. также «
Установка дистрибутива Linux в минимальной конфигурации для эксплуатации в качестве сервера.»).
Требуется установленный и настроенный сервер Х ( читай «
Установка и настройка сервера X.Org (X Window System).» ).
Уровень сложности: средний.
В. Почему IceWM?
О. По нашему мнению, в нём присутствует баланс скорости, безопасности, гибкости настройки и «привычности» интерфейса.
В. Не хочу IceWM.
О. Выбирайте любой оконный менеджер для X: 9wm, aewm, aewm++, afterstep, amaterus, amiwm, asclassic, blackbox, ctwm, dwm,
enlightenment, evilwm,
fluxbox, flwm,
fvwm, fvwm-gnome, fvwm1,
icewm,
icewm-lite, ion2, jwm, kwin, larswm, lesstif-bin, lwm, metacity, olvwm, olwm,
openbox, oroborus, pwm, qvwm, ratpoison, sapphire, sawfish, tinywm, twm, uwm, vtwm, w9wm, waimea, windowlab, wm2, wmaker, wmii, wmii2, xfwm4.
Для представления что такое оконный менеджер IceWM читаем:
Ищем пакеты в описании которых есть упоминание о IceWM:
user@host:~$ apt-cache search icewm
icewm-lite - wonderful Win95-OS/2-Motif-like window manager
icewm-gnome-support - GNOME support files for IceWM
icedove-traybiff - traybiff - new mail alert for Icedove
grun - GTK based Run dialog
iceconf - Configuration tool for icewm
wmctrl - control an EWMH/NetWM compatible X Window Manager
icemc - Editor for IceWM menus
gsetroot - a C/Gtk-based front-end for Esetroot
dfm - Desktop-File-Manager for X11
icewm-experimental - wonderful Win95-OS/2-Motif-like window manager
fspanel - minimalist panel for X
icewm-common - wonderful Win95-OS/2-Motif-like window manager
icewm - wonderful Win95-OS/2-Motif-like window manager
icewm-themes - Theme files for the Ice Window Manager
Устанавливаем то, что выбрали и не забываем про эмулятор терминала xterm:
IceWM
user@host:~$ sudo aptitude install icewm xterm
# для локали ru_RU.UTF-8 устанавливаем в качестве x-terminal-emulator
# uxterm - X terminal emulator for for Unicode (UTF-8) environments
user@host:~$ sudo update-alternatives --set x-terminal-emulator /usr/bin/uxterm
yum install icewm ???
Определяем icewm оконным менеджером по-умолчанию для всех пользователей.
Способ 1: определением x-window-manager и x-session-manager (также используются в скриптах xinit/startx) через подсистему альтернатив (man
update-alternatives(8))
Примечание: переменная STARTUP не должна быть определена.
# доступные альтернативы для x-window-manager
user@host:~$ sudo update-alternatives --list x-window-manager
/usr/bin/icewm
# доступные альтернативы для x-session-manager
user@host:~$ sudo update-alternatives --list x-session-manager
/usr/bin/icewm-session
# смотрим кто сейчас x-window-manager
user@host:~$ ls -l /etc/alternatives/x-window-manager
lrwxrwxrwx 1 root root 14 2007-08-05 22:06 /etc/alternatives/x-window-manager -> /usr/bin/icewm
# если отличается от /usr/bin/icewm, то устанавливаем
user@host:~$ sudo update-alternatives --set x-window-manager /usr/bin/icewm
# проверяем
user@host:~$ ls -l /etc/alternatives/x-window-manager
lrwxrwxrwx 1 root root 14 2007-11-18 22:16 /etc/alternatives/x-window-manager -> /usr/bin/icewm
# смотрим кто сейчас x-session-manager
user@host:~$ ls -l /etc/alternatives/x-session-manager
lrwxrwxrwx 1 root root 14 2007-08-05 22:06 /etc/alternatives/x-window-manager -> /usr/bin/icewm-session
# если отличается от /usr/bin/icewm-session, то устанавливаем
user@host:~$ sudo update-alternatives --set x-session-manager /usr/bin/icewm-session
# проверяем
user@host:~$ ls -l /etc/alternatives/x-session-manager
lrwxrwxrwx 1 root root 22 2007-11-18 22:16 /etc/alternatives/x-session-manager -> /usr/bin/icewm-session
Способ 2 (устаревший): установкой глобальной переменной окружения STARTUP, которая обрабатывается скриптом xinit (startx).
user@host:~$ sudo echo 'STARTUP="icewm-session"' >> /etc/environment
Проверить состояние переменной можно командой env:
user@host:~$ env | grep STARTUP
STARTUP=icewm-session
Примечание: чтобы переменная «вступила» в силу нужно выйти из системы (logout) и войти заново (login).
Для проверки обоих способов используйте команду startx:
Запуск сервера X из консоли
user@host:~$ startx
Скриншот IceWM после установки.
Все настройки IceWM расположены в конфигурационных файлах в каталогах:
-
/etc/X11/icewm - глобальные настройки для всех пользователей;
-
$HOME/.icewm - настройки пользователя, перекрывают глобальные;
Настройки распределены по смысловым группам и должны определяться строго в своих файлах:
-
theme - установки текущей темы;
-
preferences - главные параметры, yправляет поведением и общим внешним видом IceWM: пути, цвета, шрифты,…;
-
prefoverride - то же что и preferences, только может быть переопределено установками темы;
-
menu - управляет содержимым «стартового» меню;
-
programs - управляет содержимым «programs», подменю «стартового» меню;
-
toolbar - управляет рядом запускающих кнопок на панели задач, и имеет такой же синтаксис как и файл меню;
-
winoptions - управляет поведением отдельных приложений;
-
keys - глобальные сочетания клавиш для быстрого запуска приложений (прим: есть ещё уровень ниже: x key binding )
Описание и примеры (engl) см. в каталоге /usr/share/doc/icewm-common и
http://www.icewm.org/manual/icewm-8.html
~/.icewm/preferences
user@host:~$ cat ~/.icewm/preferences
### Меню ###
# Отображать подменю программ
ShowProgramsMenu = 0
# ... подменю "Темы"
ShowThemesMenu = 0
# ... меню "Выход"
ShowLogoutMenu = 1
# Show logout submenu
ShowLogoutSubMenu = 0
# ... "Помощь"
ShowHelp = 0
# ... "О программе"
ShowAbout = 0
# ... "Запустить"
ShowRun = 0
# ... меню "Список окон"
ShowWindowList = 0
### Панель задач ###
# Отображать "Панель задач"
ShowTaskBar = 1
TaskBarShowAllWindows = 1
TaskBarShowMailboxStatus = 0
TaskBarShowWorkspaces = 0
TaskBarShowCPUStatus = 1
TaskBarCPUDelay = 1000
CPUStatusCommand='xterm -name top -title "TOP" -e /bin/sh -c "while : ; do top; sleep 5; clear; done"'
TaskBarShowNetStatus = 1
TaskBarNetDelay = 1000
NetStatusCommand = 'xterm -name netstat -title "Network Status" -e /bin/sh -c "while : ; do netstat -atun; sleep 5; clear; done"'
NetworkStatusDevice = 'eth0 eth1'
~/.icewm/toolba
user@host:~$ cat ~/.icewm/toolbar
# This is a default toolbar definition file for IceWM
#
# Place your personal variant in $HOME/.icewm directory.
prog XTerm xterm x-terminal-emulator
#prog "Vim" vim /usr/bin/gvim -f
#prog "WWW" /usr/share/pixmaps/firefox.png x-www-browser
prog "avreg-mon" - x-terminal-emulator -e /usr/bin/avreg-mon -v
~/.icewm/menu
user@host:~$ cat ~/.icewm/menu
# This is an example for IceWM's menu definition file.
#
# Place your variants in /etc/X11/icewm or in $HOME/.icewm
# since modifications to this file will be discarded when you
# (re)install icewm.
#
prog Terminal xterm x-terminal-emulator -ls
Включаем нужные приложения в автозагрузку
по старту графической оболочки для конкретного пользователя:
# нужно войти под конкретным пользователем и перейти в его домашний каталог
user@host:~$ cd $HOME
# создаём каталог, с всеми пользовательскими настройками IceWM
# (то есть можно потом клонировать для других юзеров)
user@host:~$ mkdir ~/.icewm
# создаём startup "автозагрузочный" сценарий
# показан метод с консоли, можно набрать в редакторе:
# editor ~/.icewm/startup (исключая строки с командой cat и заключительным _EOF_)
user@host:~$ cat <<_EOF_ > ~/.icewm/startup
#!/bin/sh
# автозагрузка программ для icewm
# если установлен gkrellm
[ -x /usr/bin/gkrellm ] && /usr/bin/gkrellm&
# если установлен xxkb
[ -x /usr/bin/xxkb ] && /usr/bin/xxkb&
# если установлен локальный просмотрщик камер avreg-mon
# включать только после окончательной настройки AVReg
if [ -x /usr/bin/avreg-mon ]; then
(sleep 3; /usr/bin/avreg-mon&)&
fi
# если установлен idesk
if [ -x /usr/bin/idesk ]; then
(sleep 2; /usr/bin/idesk&)&
fi
exit 0
_EOF_
# делаем скрипт исполняемым
user@host:~$ chmod u+x ~/.icewm/startup
Устанавливаем индикатор раскладки клавиатуры XXKB:
Debian/Ubuntu
user@host:~$ sudo aptitude install xxkb
Настройка xxkb (прим: глобально для всех пользователей) производится через файл
/etc/X11/app-defaults/XXkb
Приводим отличия от стандартной версии конфигурационного файла:
-
«–» - помечены строки, которые нужно удалить,
-
»+» - добавить (обычно вместо удалённых).
/etc/X11/app-defaults/XXkb
-XXkb.mainwindow.enable: yes
+XXkb.mainwindow.enable: no
-XXkb.button.geometry: 15x15-60+7
+XXkb.button.geometry: 15x15-70+7
-XXkb.button.xpm.3: su15.xpm
-XXkb.button.xpm.4:
+XXkb.app_list.wm_class_name.ignore: gkrellm avreg-mon
Документация по настройке xxkb на русском языке:
"хитрый" способ, так как документ в KOI8-R, а локаль обычно в UTF-8
user@localhost:~$ zcat /usr/share/doc/xxkb/README.koi8.gz | iconv -f koi8-r | pager
IceWM ничего не знает про ярлыки рабочего стола (иконки), поэтому для их использования понадобится приложение
idesk.
Установка idesk в Debian/Ubuntu
user@host:~$ sudo aptitude install idesk
Создаём конфигурационный файл .ideskrc:
~/.ideskrc
user@host:~$ cat << _EOF_ > .ideskrc
table Config
FontName: helvetica
FontSize: 13
FontColor: #37CFA6
ToolTip.FontSize: 13
ToolTip.FontName: helvetica
ToolTip.ForeColor: #0000FF
ToolTip.BackColor: #FFFFFF
ToolTip.CaptionOnHover: true
ToolTip.CaptionPlacement: Right
Locked: true
Transparency: 100
Shadow: true
ShadowColor: #000000
ShadowX: 1
ShadowY: 1
Bold: true
ClickDelay: 300
IconSnap: true
SnapWidth: 10
SnapHeight: 10
SnapOrigin: BottomRight
SnapShadow: false
SnapShadowTrans: 200
CaptionOnHover: false
CaptionPlacement: bottom
FillStyle: fillinvert
Background.Delay: 0
Background.Source: None
Background.File: None
Background.Mode: Center
Background.Color: #C2CCFF
end
table Actions
Lock: control right doubleClk
Reload: middle doubleClk
Drag: left hold
EndDrag: left singleClk
Execute[0]: left doubleClk
end
_EOF_
Создаём каталог для файлов - ярлыков:
user@host:~$ mkdir .idesktop
Для примера создадим ярлык программы часов на рабочем столе:
user@host:~$ cat << _EOF_ > ~/.idesktop/xclock.lnk
table Icon
Caption: Часы
Icon: /usr/share/idesk/folder_home.xpm
X: 31
Y: 31
Command[0]: /usr/bin/xclock
end
_EOF_
Документация по idesk:
Установка
Debian/Ubuntu
user@host:~$ sudo aptitude install ИМЯ_ПАКЕТА
Если на целевом компьютере необходимо следить за системными показателями, такими как загрузка процессора, памяти, сети, заполнение диска(ов), можно воспользоваться графическими апплетами рабочего стола из класса системных мониторов.
В легковесных графических WM, к которым относится IceWM, нет встроенных мониторов как в полновесных GNONE и KDE, однако эта ситуация легко разрешается установкой «внешних» апплетов.
Мы советуем обратить внимание на два таких монитора:
-
gkrellm
-
установка
Debian/Ubuntu
user@host:~$ sudo aptitude install gkrellm
-
документация:
-
conky
-
установка
Debian/Ubuntu
user@host:~$ sudo aptitude install conky
-
документация:
Автоматический вход в систему под определённым пользователем без ввода пароля с загрузка графической оболочки (и соответственно программ в «автозагрузке»).
В конце фазы загрузки любого дистрибутива Linux Вы увидите приглашение на вход в систему (login).
Если Вы физически находитесь прямо за целевым компьютером, то такое приглашение будет
-
либо в текстовом режиме - на системной или виртуальной консоли,
-
либо в графическом режиме - это работают дисплейные менеджеры gdm, kdm, xdm.
Если у Вас 2 случай - удаляйте эти пакеты (gdm, kdm, xdm) и перегружайтесь (загрузка должна остановиться на текстовом приглашении), так как, для обеспечения автологина нам нужно самостоятельно «поднимать» сервер X.
Как правило в большинстве дистрибутивов есть скрипт /etc/init.d/rc.local (пути могут быть несколько другими), который выполняется одним из последних, среди всех демонов(сервисов)
В свою очередь, /etc/init.d/rc.local, выполняет скрипт /etc/rc.local, в который мы и вставим команду, которая:
-
обеспечит вход в систему пользователя с именем luser (подставьте своего);
-
запустит графический сервер Х (далее нужные приложения см. #Приложения в автозагрузку).
Открываем в редакторе файл /etc/rc.local
user@host:~$ sudo editor /etc/rc.local
и добавляем в конец, перед последней строкой «exit 0», строки:
Bash
# автологин пользователя с именем "luser" с последующим запуском графической оболочки
/bin/su - luser -c "/bin/sh -lc startx"
Однако это ещё не всё. Теперь нужно определить кто может запускать сервер X.
Варианты:
Debian/Ubunty
user@host:~$ sudo dpkg-reconfigure x11-common
user@host:~$ sudo /etc/init.d/x11-common restart
В других дистрибутивах просто отредактируйте файл
/etc/X11/Xwrapper.config, определив параметр «allowed_users» значением «anybody»
user@host:~$ cat /etc/X11/Xwrapper.config
# Xwrapper.config (Debian X Window System server wrapper configuration file)
#
# See the Xwrapper.config(5) manual page for more information.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command as root:
# dpkg-reconfigure x11-common
allowed_users=anybody
nice_value=0
Перегружаемся для проверки.
user@host:~$ sudo reboot
или
user@host:~$ sudo shutdown -r now
В домашнем каталоге пользователя присутствует файл .xsession-errors в который дописывается STDERR вывод приложений, запускаемых в графической оболочке.
Проблема в том, что .xsession-errors файл умеет только «расти» и нужно как-то его очищать или запретить дозапись.
Приводим глобальный способ для всех пользователей через правку скрипта
Xsession, выполняемого по startx или десктоп-менеджером, таким как xdm, gdm, kdm.
патч
debian:/etc/X11# diff -u /etc/X11/Xsession.orig /etc/X11/Xsession
--- /etc/X11/Xsession.orig 2007-11-19 04:50:31.000000000 +0300
+++ /etc/X11/Xsession 2007-11-19 04:50:56.000000000 +0300
@@ -91,7 +91,7 @@
errormsg "unable to create X session log/error file; aborting."
fi
-exec >>"$ERRFILE" 2>&1
+exec >"$ERRFILE" 2>&1
echo "$PROGNAME: X session started for $LOGNAME at $(date)"
Необходимо обеспечить, что конфигурация рабочего стола не была случайно или не случайно испорчена вандалом юзером.
Вспоминаем, что все настройки, произведённые в примерах этой статьи находятся и сохранены в файловой системе (файлах). Это значит, что для нашей задачи нужно просто запретить изменение файлов и каталогов.
Например:
user@host:~$ sudo chown -R root .icewm .idesktop .ideskrc .bash*