Видеонаблюдение через интернет в веб-браузере

Установка и настройка IceWM в минимальной конфигурации.

В статье рассматривается один из вариантов установки лёгкого оконного менеджера 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 читаем:

Установка

Debian/Ubuntu

Ищем пакеты в описании которых есть упоминание о 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

RedHat/CentOS/Fedora

yum install icewm ??? FIXME

Настройка графического окружения

Выбор менеджером по-умолчанию.

В Debian/Ubuntu

Определяем 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

Отсекаем лишнее.

Все настройки 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.

Устанавливаем индикатор раскладки клавиатуры 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:

Файловые менеджеры.

  • двухпанельные (с идеологией Norton Commander):
    • mc - Midnight Commander (на псевдографике, в консоли или в терминале);
    • emelfm, gentoo, worker - графические;
  • однопалельные в стиле проводника Win, но с табами:
    • pcmanfm или облегчённая версия без поддержки HAL pcmanfm-nohal.

Установка

Debian/Ubuntu

user@host:~$ sudo aptitude install ИМЯ_ПАКЕТА

Системные мониторы.

Если на целевом компьютере необходимо следить за системными показателями, такими как загрузка процессора, памяти, сети, заполнение диска(ов), можно воспользоваться графическими апплетами рабочего стола из класса системных мониторов.

В легковесных графических WM, к которым относится IceWM, нет встроенных мониторов как в полновесных GNONE и KDE, однако эта ситуация легко разрешается установкой «внешних» апплетов.

Мы советуем обратить внимание на два таких монитора:

  1. gkrellm
  1. conky

Заключительные операции

Автологин (вход без ввода пароля).

Автоматический вход в систему под определённым пользователем без ввода пароля с загрузка графической оболочки (и соответственно программ в «автозагрузке»).

В конце фазы загрузки любого дистрибутива Linux Вы увидите приглашение на вход в систему (login).

Если Вы физически находитесь прямо за целевым компьютером, то такое приглашение будет

  1. либо в текстовом режиме - на системной или виртуальной консоли,
  2. либо в графическом режиме - это работают дисплейные менеджеры gdm, kdm, xdm.

Если у Вас 2 случай - удаляйте эти пакеты (gdm, kdm, xdm) и перегружайтесь (загрузка должна остановиться на текстовом приглашении), так как, для обеспечения автологина нам нужно самостоятельно «поднимать» сервер X.

Как правило в большинстве дистрибутивов есть скрипт /etc/init.d/rc.local (пути могут быть несколько другими), который выполняется одним из последних, среди всех демонов(сервисов)

В свою очередь, /etc/init.d/rc.local, выполняет скрипт /etc/rc.local, в который мы и вставим команду, которая:

  1. обеспечит вход в систему пользователя с именем luser (подставьте своего);
  2. запустит графический сервер Х (далее нужные приложения см. #Приложения в автозагрузку).

Открываем в редакторе файл /etc/rc.local

user@host:~$ sudo editor /etc/rc.local

и добавляем в конец, перед последней строкой «exit 0», строки:

Bash

# автологин пользователя с именем "luser" с последующим запуском графической оболочки
/bin/su - luser -c "/bin/sh -lc startx"

Однако это ещё не всё. Теперь нужно определить кто может запускать сервер X.

Варианты:

  • только root;
  • пользователь с консоли;
  • кто-угодно (выберите этот вариант).

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

В домашнем каталоге пользователя присутствует файл .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*

howto/icewm.txt · Последние изменения: 2011-03-14