"Нас Атакуют!" Изобличи козни лукавого, запрети диаволу
FVWM - один для всех: OpenBSD 5 и Linux
Операционные системы Линукс и Опен БСД зачастую используются вместе в "мульти-загрузочной" конфигурации на одном компьютере. Разработка ПО, тестирование, разделение "личной" и "рабочей" систем, сетевые задачи - вот некоторые из причин иметь обе эти ОС на вашем лаптопе.
В то же время значительные различия во внешнем виде и скорости пользовательского интерфейса этих систем могут причинять неудобства в повседневной работе при достаточно частом переключении между ними. Предлагаемый в Fedora Linux Gnome 3 явно несоответствует требованиям высокой скорости отклика, предъявляемым пользователями FVWM в OpenBSD. Соответственно, устаревшая версия диспетчера окон в OpenBSD не в состоянии удовлетворить придирчивый вкус любителей "сглаженных" шрифтов.
В предлагаемой заметке я делюсь своим опытом установки и конфигурации последней версии FVWM как "унифицированного" диспетчера окон для обеих систем OpenBSD и Fedora Linux. Во всех случаях FVWM предоставляет совершенно идентичное современное пользовательское окружение, пригодное для быстрой и комфортной работы в любой ОС. Также я привожу общие советы, помогающие пользователю выполнять действия в системе без помощи "мастеров" Гном и способствующие более глубокому пониманию работы самой ОС и её компонентов (сетевые подключения, аппаратные средства, графика X window и тому подобных).
Прежде чем мы продолжим, я хотел бы привести строки из Евангелия:
........ == Послание к Римлянам святого апостола Павла == ............
=== Глава 13, Стих 14 ===
13 Как днем, будем вести себя благочинно, не предаваясь ни
пированиям и пьянству, ни сладострастию и распутству, ни ссорам и
зависти;
14 но облекитесь в Господа нашего Иисуса Христа, и попечения о
плоти не превращайте в похоти.
Лично для вас благая весть - Единородный Сын Божий Иисус Христос любит вас, Он взошёл на крест за ваши грехи, был распят и на третий день воскрес, сел одесную Бога и открыл нам дорогу в Царствие Небесное.
Но как часто на этой дороге нам встречаются препятствия и какими непреодолимыми они кажутся для нас! Редко кто задумывается о действительном смысле слов Господа - а ведь Он ясно предупреждает нас, давая подробный перечень вещей, которые не следует делать. Но ведь в этом перечне находятся все "мирские удовольствия", как же быть? И на этот вопрос нам дан ответ, причём прямо в том же месте Писания. Да, нам предписано заботиться о своём теле - но не потакать ему! Следуй Божиим заповедям в своей жизни и борись с влечением к мирским похотям - вот и весь секрет. Только стой твёрдо в своём решении идти за Господом и Он не оставит тебя. И как бы ни было трудно противостоять мерзким влечениям повседневного быта - держись, молись и ни за что не поддавайся, и Господь поддержит и укрепит тебя. И не оборачивайся назад!
Покайтесь, примите Иисуса как вашего Спасителя, ибо наступают последние времена и время близко - стоит Судья у ворот.
Пожалуйста, в своих каждодневных трудах, какими бы занятыми вы себе ни казались - находите время для Бога, Его заповедей и Библии.
На главной странице этого сайта вы найдете программу для чтения Библии в командной строке - буду очень рад если программа окажется полезной. Пожалуйста, читайте Библию, на экране или в печатном виде - вы будете искренне удивлены как много там сказано лично про вас и ваши обстоятельства.
Вернёмся к нашим техническим деталям.
В процессе работы мы рассмотрим следующие вопросы:
Я постараюсь быть краток, но при этом осветить достаточное количество необходимых, как мне кажется, деталей.
Общие принципы запуска системы X window
В мире современных технологий даже Линукс умудрился обрости всякими программами-помощниками, отвлекающими пользователя от понимания процессов, происходящих в его UNIX-системе в действительности. Особо плохой репутацией среди пользователей пользуется графическая подсистема X Window, несмотря на её значительное упрощение за последние годы. Понимание основных моментов работы Xorg сервера является действительно ценным и необходимым навыком для человека, всерьёз решившего освоить мир сегодняшнего UNIX.
Запуск сервера Xorg
Существует два способа запуска сервера X:
Вместе с сервером X Window обычно запускается некий определённый пользователем минимальный набор приложений. Используемый в каждом данном случае способ запуска зависит от типа ОС и наличия других графических систем.
Запуск посредством диспетчера Х дисплеев XDM
Если мы установили UNIX на рабочей станции, то вероятнее всего нам понадобится постоянно работающий X сервер. Именно с этой целью в стандартную поставку Xorg включается X Display Manager XDM. Эта программа обычно автоматически запускается в процессе загрузки системы и поддерживает X сервер в работающем состоянии, перезапуская его при необходимости. Также XDM предлагает пользователям окно входа в систему. После удачного ввода имени и пароля XDM запустит вашу собственную "X сессию".
Начальное состояние X сессии определяется файлом в вашей домашней директории:
Запуск вручную с использованием xinit
Машины, использующие более одной графической системы, обычно не требуют автоматического запуска Xorg сервера. При необходимости мы запускаем скрипт под названием "startx" (или "x11", "xstart"), выполняющий начальные действия вроде установки значений ресурсов (ниже) и запуска программ. Мы можем создать такой скрипт сами, используя программу "xinit" - она запускает одну команду (скрипт), указанную пользователем как X server, и другую для запуска "пользовательского окружения". Затем "xinit" ожидает завершения одной из этих двух программ (или скриптов). Такой подход обеспечивает значительную гибкость конфигурации, но за счёт отсутствия простого интерфейса. Поэтому "xinit" не предназначен для использования конечными пользователями.
Используемый пользователями скрипт "startx" содержит вызов "xinit" внутри и зависит от содержания двух важных файлов:
..... == Первое соборное послание святого апостола Иоанна == ......... === Глава 4, Стих 21 === 20 Кто говорит: "я люблю Бога", а брата своего ненавидит, тот лжец: ибо не любящий брата своего, которого видит, как может любить Бога, Которого не видит? 21 И мы имеем от Него такую заповедь, чтобы любящий Бога любил и брата своего. (b+/b-, c+/c-, +/-, *) > [user@host ~]$ cat .xinitrc xrdb -load $HOME/.Xresources xsetroot -solid gray & xclock -g 50x50-0+0 -bw 0 & xload -g 50x50-50+0 -bw 0 & xterm -g 80x24+0+0 & xconsole -g 50X10+0-0 & xv -rmode 2 -quit Pictures/mountain-panorama.jpg & fvwm|twm [user@host ~]$
Ресурсы приложений для X
Специальное приложение "Xrdb" используется для установки содержимого свойства "RESOURCE_MANAGER" для основного ("корневого") окна X-экрана 0 или свойства "SCREEN_RESOURCES" для основного окна любого другого экрана, или всех окон вместе, в любой комбинации. Как я уже показал выше, обычно эта программа вызывается из скриптов инициализации. Детали в "man 1 xrdb".
Утилита "xrdb" обычно используется в системном файлe "Xresources" (или в домашней директории пользователя - "~/.xresources") и представляет собой современную замену файлам "~/.Xdefaults".
Имена дисплеев
С точки зрения конечного пользователя, каждый X сервер использует имена дисплеев такого вида (мы говорим о "Х дисплее", не о физическом мониторе):
Приложения пользователя используют эту информацию для определения к какому серверу Х и к какому экрану "подключать" свой вывод (при этом каждый "Х дисплей" может иметь более одного экрана (физического монитора)). Рассмотрим составные компоненты имени X дисплея:
В POSIX системах имя "X дисплея по умолчанию" хранится в переменной окружения DISPLAY. Эта переменная устанавливается автоматически эмулятором терминала "xterm" - но если мы используем сессию, подключённую к другому компьютеру по сети, мы должны установить DISPLAY вручную так, чтобы она указывала на Х дисплей нашей рабочей станции (то есть "локальный" Х сервер). Подключение через OpenSSH в этом не нуждается. К примеру, такая установка: "$ DISPLAY=myOBSDws:0.1; export DISPLAY" будет выводить все графические окна сессии на втором мониторе моей рабочей станции (т.е. той, на клавиатуре которой я печатаю команды).
Не забывайте, что "Х дисплей" - чисто "логическое" понятие, определяемое и используемое Х сервером. Существует скрипт "xon", запускающий для нас Х программу на удалённой машине, и этот скрипт устанавливает DISPLAY самостоятельно. Также большинство графических Х программ понимают параметр командной строки "-display", что позволяет "перенаправлять" вывод этих программ на удалённый дисплей.
Не пытайтесь найти в Линукс системе детальное описание всех команд, входящих в состав Xorg - вместо этого поищите на машине с ОпенБСД или в интернете.
Диспетчер окон
Расположение графических окон на экране определяется и контролируется специальной программой, называемой "диспетчер окон". Диспетчеры окон очень различаются по функциональности - некоторые из них прорисовывают "окружение" окна, некоторые нет, многие диспетчеры раскладывают окна программ в разном порядке, используют виртуальные экраны и тому подобное.
Диспетчеры окон сами по себе являются пользовательскими программами (хотя и очень сложными), чем отчасти и объясняется их разнообразие. Xorg включает один из самых старых диспетчеров - TWM. Почти все существующие сегодня window managers происходят от TWM - в том числе и FVWM (что вполне понятно из имени).
Диспетчер X дисплеев
Мы уже упомянули название XDM выше - именно он является тем самым диспетчером X дисплеев в стандартной поставке Xorg. Прочесть об XDM более подробно можно в "man 1 xdm".
Как я уже говорил, после "сброса" (resetting) Х сервера XDM запускает специальный скрипт ("Xsetup"), предоставляющий пользователю окно входа в систему (используя "xlogin"). Именно "xlogin" предлагает нам ввести имя и пароль.
После удачного входа любого пользователя в систему XDM запускает скрипт "Xstartup" - как пользователь "root".
После этого XDM выполняет знакомый нам системный скрипт "Xsession", уже под именем нашего пользователя. Этот файл обычно включает в себя вызовы нескольких дополнительных программ, среди которых и наш файл "~/.xsession" в нашей домашней директории, содержащий специфические настройки для нашей X сессии. Наша Х сессия заканчивается как только прекращается работа скрипта "Xsession".
После окончание сессии "Xreset" скрипт запускается снова, чтобы освободить системные ресурсы, завершить программы, "сбросить" (reset) Х сервер - и цикл начинается вновь, с нового логина пользователя.
Логфайл "/var/log/xdm.log" содержит полезную информацию - стандартный поток ошибок (stderr) программ XDM, Xsetup, Xstartup, Xsession и Xreset. Всегда проверяйте этот файл при сложностях с запуском X сервера.
Как уже было сказано, Display Manager (XDM из поставки Xorg или GDM из Gnome или KDM из KDE) выполняет скрипт "~/.xsession" в нашей домашней директории (как часть системного скрипта "Xsession") и наконец-то запускает Window Manager (TWM из состава Xorg или наш FVWM).
Но это не обязательно должно происходить именно так - как мы уже знаем, диспетчер окон является обычной пользовательской программой и вместо него мы можем заставить XDM запустить для нас что угодно - например, "xterm". В этом случае именно эмулятор терминала будет программой, определяющей длительность нашей сессии Х - и наша сессия завершится, как только мы закроем терминал. При этом обычный порядок действий сохранится - XDM вызовет скрипт "Xreset" и покажет нам новое окно входа в систему.
Очевидно, что в этом случае единственное Х-приложение (xterm) не будет иметь ни обрамления (decoration), ни кнопок, и мы не сможем переключаться между окнами программ и выполнять прочие обычные для пользователя действия. Почему? Дело в том, что обычно всю эту работу за нас выполняет диспетчер окон (TWM/FVWM) - и мы решили не запускать его вообще, запустив простой "xterm" вместо FVWM.
Подводя итог, можно сказать что диспетчер X дисплеев (Display Manager) знает как запускать "первое" Х-приложение в Х-сессии пользователя. И обычно в этой роли выступает диспетчер окон (Window Manager) - хотя вместо него может быть запущена любая программа, скомпонованная с "XLib".
Специфика для Fedora Linux
В Fedora Linux (точнее, в Window Manager/Desktop Gnome) всё по-другому. Вместо использования стандартного XDM используется собственный Display Manager GDM, не имеющий внятной документации.
Мы можем попытаться догадаться о подробностях его работы, глядя в конфигурационные файлы:
............. == Послание к Ефесянам святого апостола Павла == ................. === Глава 4, Стих 19 === 19 Они, дойдя до бесчувствия, предались распутству так, что делают всякую нечистоту с ненасытимостью. (b+/b-, c+/c-, +/-, *) > [root@host gdm]# pwd /etc/gdm [root@host gdm]# ls -la /etc/gdm total 36 drwxr-xr-x. 6 root root 4096 Sep 25 23:43 . drwxr-xr-x. 140 root root 12288 Oct 20 13:26 .. -rw-r--r--. 1 root root 91 Aug 13 00:48 custom.conf drwxr-xr-x. 2 root root 4096 Sep 25 23:43 Init drwxr-xr-x. 2 root root 4096 Sep 25 23:43 PostLogin drwxr-xr-x. 2 root root 4096 Sep 25 23:43 PostSession drwxr-xr-x. 2 root root 4096 Sep 25 23:43 PreSession lrwxrwxrwx. 1 root root 21 Sep 25 23:43 Xsession -> ../X11/xinit/Xsession [root@host gdm]# [root@host gdm]# ls -la /etc/X11/ total 40 drwxr-xr-x. 6 root root 4096 Oct 19 22:12 . drwxr-xr-x. 140 root root 12288 Oct 20 13:26 .. drwxr-xr-x. 2 root root 4096 Jul 8 18:56 applnk drwxr-xr-x. 2 root root 4096 Jul 8 18:56 fontpath.d drwxr-xr-x. 5 root root 4096 Oct 19 22:46 xinit -rw-r--r--. 1 root root 547 Feb 19 2013 Xmodmap drwxr-xr-x. 2 root root 4096 Sep 25 23:21 xorg.conf.d -rw-r--r--. 1 root root 795 Oct 15 15:17 Xresources -- сюда включены XTerm resources [root@host gdm]# [root@host gdm]# ls -la /etc/X11/xinit/ total 36 drwxr-xr-x. 5 root root 4096 Oct 19 22:46 . drwxr-xr-x. 6 root root 4096 Oct 19 22:12 .. -rwxr-xr-x. 1 root root 2030 Feb 19 2013 Xclients drwxr-xr-x. 2 root root 4096 Feb 19 2013 Xclients.d -rwxr-xr-x. 1 root root 1486 Feb 19 2013 xinitrc -rw-r--r--. 1 root root 2008 Feb 19 2013 xinitrc-common drwxr-xr-x. 2 root root 4096 Oct 15 15:30 xinitrc.d drwxr-xr-x. 2 root root 4096 Oct 19 22:44 xinput.d lrwxrwxrwx. 1 root root 26 Oct 15 15:30 xinputrc -> /etc/alternatives/xinputrc -rwxr-xr-x. 1 root root 3547 Feb 19 2013 Xsession [root@host gdm]#
Дальнейшие попытки разобраться в деталях инициализации и работы Гном могут не стоить затраченного времени. Вместо этого, попробуем применить описанные выше "Общие принципы запуска системы X window" и поручим GDM те же самые задачи, которые выполняет стандартный XDM - предоставить пользователю возможность войти в систему, проверить авторизацию PAM и вызвать скрипт "~/.xsession" в нашей домашней директории. И уже в этот скрипт мы можем включить всё необходимое, включая вызов нашего любимого диспетчера окон (для меня FVWM, вам может нравиться xmonad или awesome или что-то другое). Этот подход полностью игнорирует "продвинутый" Гном и позволяет нам наконец понять что же происходит в нашей системе.
Сделать это очень просто - я выполняю эти действия каждый раз, когда попадаю в новую систему, в которой мне необходимо продуктивно работать в привычном удобном окружении.
Мои стандартные действия на новой системе
[user@host X11]$ ls -la ~/.xsession -rwx------. 1 user user 70 Oct 20 16:59 /home/user/.xsession [user@host X11]$ [user@host X11]$ cat ~/.xsession xrdb -load $HOME/.Xresources echo `date` >/tmp/1 xterm -g 140x90+0+0 & ~/fvwm [user@host X11]$
exec -l $SHELL -c "$CK_XINIT_SESSION $HOME/.xsession"
В этот момент передо мной предстанут все мои начальные программы, включённые в файл "~/.xsession", в окружении моего любимого диспетчера окон.
Вот и всё - просто и без "Гномовских" трюков - обычная функциональность и конфигурация Х сервера.
Заметьте - "xterm" может испытывать трудности со "сворачиванием" в пиктограмму под FVWM, в этом случае надо отключить его (xterm) функцию под названием "ActiveIcon", используя такие ресурсы:
XTerm*vt100.activeIcon:false XTerm*iconGeometry:32x32+0+0 XTerm*iconHint:mini.xterm_32x32.xpm
Иногда бывает необходимо быстро (но на время) изменить индивидуальные значения какого-либо ресурса:
echo "XTerm*faceSize:13.0" | xrdb -override
После этого изменения все последующие окна "xterm" будут временно использовать новое значение размера шрифта.
Также может понадобиться сделать некоторые изменения для библиотеки "Xft", улучшающие прорисовку векторных шрифтов:
Xft.dpi: 96 Xft.hinting: 1 Xft.hintstyle: hintmedium Xft.antialias: 1
Вы уже должны хорошо знать где записываются изменённые значения ресурсов для Х приложений.
Open BSD - живое воплощение стандарта
Названием заголовка сказано всё - ОпенБСД точно следует стандарту POSIX и использует Х сервер именно так, как описано в разделе "Общие принципы запуска системы X window". Никаких "доделок на коленках" не понадобится. Я просто выполняю шаги, описанные выше в "Мои стандартные действия на новой системе" и получаю полностью работающее привычное мне окружение новейшего FVWM со встроенными сглаженными шрифтами и прочими удобствами.
Одна тонкость - после компиляции нового FVWM мне необходимо добавить его в мой PATH перед всеми остальными записями, чтобы новая версия диспетчера окон всегда вызывалась первой.
Учитывая всё вышесказанное, мой файл "~/.kshrc" для OpenBSD приобретает такой вид:
# Окончательная версия файла "~/.kshrc" # для запуска нового диспетчера окон FVWM. . /etc/ksh.kshrc export PATH=/home/user/fvwm/bin:$PATH export HOSTNAME=`hostname -s` export OS=`uname` # requires "pkg_add vim-7.3.154p2-no_x11-perl-python-ruby.tgz" alias vi="vim" export LC_CTYPE=en_US.UTF-8 export EDITOR=vi export VISUAL=vi # Russian phonetic keyboard "яверты", switch with both shifts. # Also requires the line "set +o emacs-usemeta" in /etc/ksh.kshrc set +o emacs-usemeta # grp_led may be "num", "sroll" setxkbmap -layout 'us,ru(phonetic)' -option 'grp:shifts_toggle,grp_led:caps' set -o vi alias lynx="lynx -term=vt100" export PS1="\W:\\$ " if [[ $TERM == "xterm" || $TERM == "rxvt-256color" ]] then /usr/local/bin/read_and_think 70 else /usr/local/bin/read_and_think.kjv 70 fi
После этого процесс работы в графическом Х-окружении Линукса и ОпенБСД становится для меня полностью идентичным.
Компиляция FVWM
Выше я просто упоминал вскользь "компилирую последнюю версию FVWM из исходного кода". Пришло время пояснить как выполняется этот очень простой процесс.
Подготовка кода
Прежде всего загрузим последнюю версию кода с официальной странички проекта FVWM - "fvwm.org".
Разархивируем код и подготовим такой скрипт с командой конфигурации:
................... == Книга пророка Иеремии == ...................... === Глава 24, Стих 4 === 4 И было ко мне слово Господне: 5 так говорит Господь, Бог Израилев: подобно этим смоквам хорошим Я признаю хорошими переселенцев Иудейских, которых Я послал из сего места в землю Халдейскую; 6 и обращу на них очи Мои во благо им и возвращу их в землю сию, и устрою их, а не разорю, и насажду их, а не искореню; 7 и дам им сердце, чтобы знать Меня, что Я Господь, и они будут Моим народом, а Я буду их Богом; ибо они обратятся ко Мне всем сердцем своим. (b+/b-, c+/c-, +/-, *) > [user@host fvwm-2.6.5]$ cat fvwm_config make distclean ./configure --disable-bidi --disable-xcursor \ --disable-gtktest --disable-imlibtest --without-gnome \ --disable-sm -disable-rsvg --enable-xft \ --disable-perllib --enable-xrender \ --prefix=/home/user/fvwm --disable-package-subdirs \ --libexecdir='${prefix}/modules' --datadir='${prefix}/data' # --with-png-library=/usr/lib64 \ # --with-xft-library=/usr/lib64 \ # --with-xpm-library=/usr/lib64 [user@host fvwm-2.6.5]$
Запускаю конфигурационный скрипт "./fvwm_config" (ещё ничего не компилируется!) и проверяю вывод, убеждаясь что все необходимые мне опции включены:
... Fvwm Configuration: Version: 2.6.5 Executables: /home/user/fvwm/bin Man pages: /home/user/fvwm/share/man Modules: /home/user/fvwm/modules Data files: /home/user/fvwm/data Doc files: /home/user/fvwm/data/doc/fvwm Perl lib: (Not installed) /home/user/fvwm/data/perllib Locale msg: /home/user/fvwm/data/locale ar de fr sv_SE zh_CN With Asian bi-direct. text support? no: Explicitly disabled With Gettext Native Lang support? yes (libc) With GTK+ required for FvwmGtk? no: Failed to detect GTK, see config.log With Iconv support? yes (from C library) With Mouse strokes (gestures)? no: Can't find working libstroke With PNG image support? yes With ReadLine sup. in FvwmConsole? no: Can't find working libreadline With RPlay support in FvwmEvent? no: Can't find working librplay With Shaped window support? yes With Shared memory for XImage? yes With Session Management support? no: Explicitly disabled With SVG image support? no: Explicitly disabled With Xcursor support? no: Explicitly disabled With Xinerama multi-head support? no: Failed to detect libXinerama With Xft anti-alias font support? yes (version 2) With XPM image support? yes With Xrender image support? yes Build man pages? yes Build HTML documentation? no
Если при компиляции в OpenBSD не находится уже установленная в системе "libpng", я прежде всего определяю её местоположение:
~:# pkg-config --libs --cflags libpng -I/usr/local/include/libpng -L/usr/local/lib -lpng -lz -lm ~:#
Затем, добавляю в конфигурационный скрипт опции:
with-png-library=PATH use png library (for coloured or shaped icons) with-png-includes=DIR set directory for png headers
Таким образом, конфигурационная команда для компиляции FVWM под OpenBSD выглядит так:
make distclean ./configure --disable-bidi --disable-xcursor \ --disable-gtktest --disable-imlibtest --without-gnome \ --disable-sm -disable-rsvg --enable-xft \ --disable-perllib --enable-xrender \ --prefix=/home/user/fvwm --disable-package-subdirs \ --libexecdir='${prefix}/modules' --datadir='${prefix}/data' \ --with-png-library=/usr/local/lib/libpng.so.15.0 \ --with-png-includes=/usr/local/include/libpng # --with-xft-library=/usr/lib64 \ # --with-xpm-library=/usr/lib64
Компиляция кода
Пора начать саму компиляцию и компоновку командами "make" и "make install". Проверим что моя новая версия FVWM была установлена в моей домашней директории:
......... == Первое послание к Коринфянам святого апостола Павла == ............ === Глава 10, Стих 3 === 1 Не хочу оставить вас, братия, в неведении, что отцы наши все были под облаком, и все прошли сквозь море; 2 и все крестились в Моисея в облаке и в море; 3 и все ели одну и ту же духовную пищу; 4 и все пили одно и то же духовное питие: ибо пили из духовного последующего камня; камень же был Христос. (b+/b-, c+/c-, +/-, *) > [user@host fvwm]$ pwd /home/user/fvwm [user@host fvwm]$ ls -la total 24 drwxrwxr-x. 6 user user 4096 Oct 20 18:48 . drwx------. 94 user user 4096 Oct 20 18:48 .. drwxrwxr-x. 2 user user 4096 Oct 20 18:48 bin drwxrwxr-x. 4 user user 4096 Oct 20 18:48 data drwxrwxr-x. 2 user user 4096 Oct 20 18:48 modules drwxrwxr-x. 3 user user 4096 Oct 20 18:48 share [user@host fvwm]$ [user@host fvwm]$ ls -la bin/ total 4800 drwxrwxr-x. 2 user user 4096 Oct 20 18:48 . drwxrwxr-x. 6 user user 4096 Oct 20 18:48 .. -rwxr-xr-x. 1 user user 4102664 Oct 20 18:48 fvwm lrwxrwxrwx. 1 user user 4 Oct 20 18:48 fvwm2 -> fvwm -rwxr-xr-x. 1 user user 4460 Oct 20 18:48 fvwm-bug -rwxr-xr-x. 1 user user 73129 Oct 20 18:48 FvwmCommand -rwxr-xr-x. 1 user user 6591 Oct 20 18:48 fvwm-config -rwxr-xr-x. 1 user user 9664 Oct 20 18:48 fvwm-convert-2.4 -rwxr-xr-x. 1 user user 14482 Oct 20 18:48 fvwm-convert-2.6 -rwxr-xr-x. 1 user user 54464 Oct 20 18:48 fvwm-menu-desktop -rwxr-xr-x. 1 user user 23535 Oct 20 18:48 fvwm-menu-directory -rwxr-xr-x. 1 user user 34772 Oct 20 18:48 fvwm-menu-headlines -rwxr-xr-x. 1 user user 7796 Oct 20 18:48 fvwm-menu-xlock -rwxr-xr-x. 1 user user 17439 Oct 20 18:48 fvwm-perllib -rwxr-xr-x. 1 user user 534492 Oct 20 18:48 fvwm-root lrwxrwxrwx. 1 user user 9 Oct 20 18:48 xpmroot -> fvwm-root [user@host fvwm]$
Обновлю маршрут поиска файлов в файле "~/.profile" в моём домашнем каталоге:
..................... == Книга Екклезиаста == ........................ === Глава 11, Стих 6 === 6 Утром сей семя твое, и вечером не давай отдыха руке твоей, потому что ты не знаешь, то или другое будет удачнее, или то и другое равно хорошо будет. (b+/b-, c+/c-, +/-, *) > [user@host ~]$ cat .profile export PATH=/home/user/fvwm/bin:$PATH [user@host ~]$ [user@host ~]$ which fvwm ~/fvwm/bin/fvwm [user@host ~]$ [user@host ~]$ fvwm -V fvwm 2.6.5 compiled on Oct 20 2013 at 18:47:13 with support for: XPM, PNG, Shape, XShm, XRender, XFT, NLS ... [user@host ~]$
Конфигурация нового диспетчера окон
Диспетчер окон FVWM после компиляции будет иметь некоторую конфигурацию "встроенную по умолчанию", но мне понадобится внести необходимые изменения.
Мой подход прост - я создаю два файла: один с "общей" конфигурацией и второй с "локальной". Учитывая что вся установка нового FVWM была выполнена локально и доступна только мне, вы можете объединить оба файла в один.
Мои конфигурационные файлы для диспетчера окон FVWM
Все файлы находятся в одном и том же каталоге "~/.fvwm".
Общий файл конфигурации FVWM
Несмотря на длину файла, привожу его полностью для удобства. Заметьте - этот файл не вызывает никаких других (уже) существующих файлов из прошлых версий FVWM, присутствующих в системе. Конфигурация диспетчера окон начинается "с чистого листа" и основана только на "вкомпилированных" в исходный код значениях по умолчанию.
..... == Первое соборное послание святого апостола Иоанна == ......... === Глава 3, Стих 19 === 19 И вот по чему узнаем, что мы от истины, и успокаиваем пред Ним сердца наши; 20 ибо если сердце наше осуждает нас, то _кольми_ _паче_ _Бог,_ потому что Бог больше сердца нашего и знает все. (b+/b-, c+/c-, +/-, *) > [user@host ~]$ cat .fvwm/system_wide_fvwmrc # FVwm system-wide-config file - based on OpenBSD's one. # (by read-and-think.org) # PixmapPath and IconPath were deprecated. ImagePath $HOME/.fvwm/pixmaps:+:$HOME/.fvwm/bitmaps ModulePath /home/user/fvwm/modules EdgeResistance 500 EdgeScroll 100 100 ClickTime 750 DefaultFont "xft:Liberation Mono:size=14:antialias=true" Style * Font "xft:Liberation Mono:size=12:antialias=true" Style * IconFont "xft:Liberation Mono:size=10:antialias=true" # WindowFont and IconFont are deprecated. Style * HilightFore #bebebe, HilightBack blue # HilightColor is deprecated. MenuStyle * "fvwm", Foreground "#4d4d4d", Background "#bebebe", \ Greyed "#e7e7e7", Font "xft:Liberation Mono:size=12:antialias=true", \ "AnimationOff" DeskTopSize 3x3 ColormapFocus FollowsMouse # default Styles: Style "*" BorderWidth 7, HandleWidth 7 Style "*" Icon unknown1.xpm, Color #bebebe/darkred Style "*" MWMFunctions, MWMDecor, HintOverride Style "*" DecorateTransient, NoPPosition Style "*" IconBox 0 -10 -280 -1 Style "*" FocusFollowsMouse Style "*" RandomPlacement, SmartPlacement # Styles for various Fvwm modules: Style "Fvwm*" NoTitle, Sticky, WindowListSkip Style "Fvwm*" BorderWidth 2, CirculateSkipIcon, CirculateSkip Style "FvwmPager" StaysOnTop Style "FvwmBanner" StaysOnTop Style "FvwmButtons" Icon toolbox.xpm, ClickToFocus # Styles for various common programs: Style "*lock" NoTitle, NoHandles, Sticky, WindowListSkip, ClickToFocus Style "xbiff" NoTitle, Sticky, WindowListSkip, ClickToFocus Style "xcalc" Icon xcalc.xpm, NoButton 2,RandomPlacement,ClickToFocus Style "xmh" Icon mail1.xpm, NoIconTitle,StickyIcon Style "xmh" RandomPlacement, NoButton 2 Style "xman" Icon xman.xpm, RandomPlacement, ClickToFocus Style "xmag" Icon mag_glass.xpm, RandomPlacement, ClickToFocus Style "xgraph" Icon graphs.xpm, RandomPlacement, ClickToFocus Style "xmosaic" Color Green/Yellow, ClickToFocus Style "xconsole" Icon rterm.xpm, WindowListSkip, Sticky # some simple default key bindings: Key Next A SCM Next [*] Focus Key Prior A SCM Prev [*] Focus # some simple default mouse bindings: # for the root window: Mouse 1 R A Menu RootMenu Nop Mouse 2 R A Menu Window-Ops Nop Mouse 3 R A WindowList # for the title bar buttons: Mouse 0 1 A Menu Window-Ops2 Close Mouse 0 2 A Maximize-Func Mouse 0 4 A Iconify # for other parts of the window/borders/icons: Mouse 1 F A Resize-or-Raise Mouse 1 TS A Move-or-Raise Mouse 1 I A Move-or-Iconify Mouse 2 I A Iconify Mouse 2 FST A Menu Window-Ops2 Nop Mouse 3 TSIF A RaiseLower ######################## Initialization Functions ############################ AddToFunc InitFunction "I" Module FvwmPager 0 0 #+ "I" exec /usr/X11R6/bin/xsetroot -solid black AddToFunc RestartFunction "I" Module FvwmPager 0 0 #+ "I" exec /usr/X11R6/bin/xsetroot -solid black ######################## Menus ################### AddToMenu RootMenu "Root Menu" Title + "XTerm%mini.xterm.xpm%" Exec xterm -u8 #+ "Rxvt" Exec exec rxvt + "" Nop #+ "Remote Logins" Popup Remote-Logins #+ "" Nop + "Utilities" Popup Utilities + "" Nop + "Fvwm Modules" Popup Module-Popup + "Fvwm Window Ops" Popup Window-Ops + "Fvwm Simple Config Ops" Popup Misc-Ops + "" Nop + "Refresh Screen" Refresh + "Recapture Screen" Recapture + "(Re)Start" Popup Quit-Verify + "" Nop + "Exit" Module FvwmForm QuitVerify AddToMenu Utilities "Utilities" Title + "Top" Exec exec xterm -T Top -n Top -e top + "Calculator" Exec exec xcalc + "Xman" Exec exec xman + "Xmag" Exec exec xmag + "Editres" Exec exec editres + "" Nop #+ "XEmacs" Exec exec xemacs #+ "Mail" MailFunction xmh "-font fixed" + "" Nop + "XLock%mini.xlock.xpm%" Exec exec xlock + "" Nop + "Reset X defaults" Exec xrdb -load $HOME/.Xdefaults AddToMenu Misc-Ops "Misc Config Opts" Title + "Sloppy Focus" ChangeDefaultFocus SloppyFocus + "Click To Focus" ChangeDefaultFocus ClickToFocus + "Focus Follows Mouse" ChangeDefaultFocus FocusFollowsMouse + "" Nop + "Colormap Follows Mouse" ColormapFocus FollowsMouse + "Colormap Follows Focus" ColormapFocus FollowsFocus + "" Nop + "Full Paging ON" EdgeScroll 100 100 + "All Paging OFF" EdgeScroll 0 0 + "Horizontal Paging Only" EdgeScroll 100 0 + "Vertical Paging Only" EdgeScroll 0 100 + "Partial Paging" EdgeScroll 50 50 + "Full Paging && Edge Wrap" EdgeScroll 100000 100000 AddToMenu Window-Ops "Window Ops" Title + "Move%mini.move.xpm%" Move + "Resize%mini.resize.xpm%" Resize + "Raise%mini.raise.xpm%" Raise + "Lower%mini.lower.xpm%" Lower + "(De)Iconify%mini.iconify.xpm%" Iconify + "(Un)Stick%mini.stick2.xpm%" Stick + "(Un)Maximize%mini.maximize.xpm%" Maximize + "" Nop + "Delete%mini.excl.xpm%" Delete + "Close%mini.cut.xpm%" Close + "Destroy%mini.destroy.xpm%" Destroy + "" Nop + "Refresh Window%mini.refresh.xpm%" RefreshWindow AddToMenu Window-Ops2 "&Move%mini.move.xpm%" Move + "&Resize%mini.resize.xpm%" Resize + "R&aise%mini.raise.xpm%" Raise + "&Lower%mini.lower.xpm%" Lower + "(De)&Iconify%mini.iconify.xpm%" Iconify + "(Un)&Stick%mini.stick2.xpm%" Stick + "(Un)Ma&ximize%mini.maximize.xpm%" Maximize + "" Nop + "&Delete%mini.excl.xpm%" Delete + "&Close%mini.cut.xpm%" Close + "Destroy%mini.destroy.xpm%" Destroy + "" Nop + "ScrollBar" Module FvwmScroll 2 2 + "Print" PrintFunction #+ "Print Reverse" PrintReverseFunction AddToMenu Module-Popup "FvwmModules" Title + "Identify" Module FvwmIdent + "Talk" Module FvwmTalk + "" Nop + "Button-Bar" Module FvwmButtons + "Pager" Module FvwmPager 0 0 + "Pager (2 desks)" Module FvwmPager 0 1 + "WinList" Module FvwmWinList + "" Nop + "Banner" Module FvwmBanner + "ScrollBar" Module FvwmScroll 50 50 + "Background" Module FvwmBacker + "AutoRaise" Module FvwmAuto 200 Raise Nop + "Stop AutoRaise" KillModule FvwmAuto + "" Nop + "IconBox" Module FvwmIconBox + "IconMan" Module FvwmIconMan + "" Nop + "Form - Rlogin" Module FvwmForm Rlogin + "Form - MyFvwmTalk" Module FvwmForm MyFvwmTalk + "Form - QuitVerify" Module FvwmForm QuitVerify AddToMenu Quit-Verify + "Restart Fvwm%mini.refresh.xpm%" Restart fvwm + "" Nop + "Start cwm" Restart cwm + "Start wm2" Restart wm2 + "Start twm" Restart twm + "Start ctwm" Restart ctwm + "Start flwm" Restart flwm + "Start mwm" Restart mwm + "Start openbox" Restart openbox + "Start tvtwm" Restart tvtwm + "" Nop + "Start dummy%mini.xterm.xpm%" Restart xterm + "" Nop + "No, Don't Quit" Nop ######################## Sample Functions ########################## AddToFunc MailFunction "I" Next [$0] Iconify -1 + "I" Next [$0] Focus + "I" None [$0] Exec $0 $1 AddToFunc Move-or-Raise "I" Raise + "M" Move + "D" Lower AddToFunc Move-or-Raise2 "M" Raise + "M" Move + "D" Lower AddToFunc Maximize-Func "M" Maximize 0 100 + "C" Maximize 0 80 + "D" Maximize 100 100 AddToFunc Move-or-Iconify "I" Raise + "M" Move + "D" Iconify AddToFunc Resize-or-Raise "I" Raise + "M" Resize + "D" Lower AddToFunc Resize-or-Raise2 "M" Raise + "M" Resize + "D" Lower AddToFunc PrintFunction "I" Raise + "I" Exec xdpr -id $w AddToFunc PrintReverseFunction "I" Raise + "I" Exec xdpr 1/2 -h -rv -id $w AddToFunc Iconify-and-Raise "I" Iconify + "I" Raise # RLOGIN machine fg bg AddToFunc RLOGIN "I" Exec xterm -fg $1 -bg $2 -e rlogin $0 -8 # TELNET machine fg bg AddToFunc TELNET "I" Exec xterm -fg $1 -bg $2 -e telnet $0 AddToFunc FocusAndWarp "I" Focus + "I" WarpToWindow 2p 2p AddToFunc DeiconifyFocusAndWarp "I" Iconify -1 + "I" FocusAndWarp AddToFunc ChangeDefaultFocus "I" Style "*" $0 + "I" Recapture ############################################################################ # Now some keyboard shortcuts. # Arrow Keys # press arrow + control anywhere, and scroll by 1 page Key Left A C Scroll -100 0 Key Right A C Scroll +100 +0 Key Up A C Scroll +0 -100 Key Down A C Scroll +0 +100 # press arrow + meta key, and scroll by 1/10 of a page #Key Left A M Scroll -10 +0 #Key Right A M Scroll +10 +0 #Key Up A M Scroll +0 -10 #Key Down A M Scroll +0 +10 # press shift arrow + control anywhere, and move the pointer by 1% of a page Key Left A SC CursorMove -1 0 Key Right A SC CursorMove +1 +0 Key Up A SC CursorMove +0 -1 Key Down A SC CursorMove +0 +1 # press shift arrow + meta key, and move the pointer by 1/10 of a page Key Left A SM CursorMove -10 +0 Key Right A SM CursorMove +10 +0 Key Up A SM CursorMove +0 -10 Key Down A SM CursorMove +0 +10 # Keyboard accelerators Key F1 A M Menu RootMenu Key F2 A M Menu Window-Ops Key F3 A M WindowList "Module FvwmBanner" Key F4 A M Iconify Key F5 A M Move Key F6 A M Resize Key F7 A M CirculateUp Key F8 A M CirculateDown #Page Up/Page Down keys are used to scroll by one desktop page # in any context, press page up/down + control # in root context, just pressing page up/down is OK # # I prefer the non-wrapping scroll. These are for example purposes only #Key Next A C Scroll 100000 0 #Key Next R N Scroll 100000 0 #Key Prior A C Scroll -100000 0 #Key Prior R N Scroll -100000 0 ################## FvwmButtons button-bar ################################ *FvwmButtonsBack bisque3 *FvwmButtons(Frame 2 Padding 2 2 Container(Rows 2 Frame 1 Padding 10 0 \ Swallow(Respawn))) *FvwmButtons(NoSize Title Close, Icon bomb.xpm, Action Close) *FvwmButtons(Title Resize Icon mini.resize.xpm Back bisque4 Action Resize) *FvwmButtons(Frame -3 Swallow(Respawn,NoHints) xclock \ `Exec exec xclock -bg darkolivegreen -padding 0 -geometry +2000+0`) *FvwmButtons(3x1 Back darkolivegreen Fore white Frame 2 Padding 2 2 \ Container(Rows 1 Frame -2 Padding 1 1 Back darkolivegreen)) *FvwmButtons(Frame 2 Title(Side,Right) Mail Fore white \ Swallow(UseOld,NoRespawn)\ xbiff `Exec exec xbiff -bg darkolivegreen -geometry +200+200`) *FvwmButtons(2x1 Swallow (NoHints) "FvwmTalk" "FvwmTalk") *FvwmButtons(End) *FvwmButtons(End) ########################## Window-Identifier ############################### # Just choose colors and a fonts *FvwmIdentBack MidnightBlue *FvwmIdentFore Yellow #*FvwmIdentFont -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-* ########################### Pager ######################################### #*FvwmPagerFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-* *FvwmPagerBack darkblue *FvwmPagerFore white *FvwmPagerHilight #2d2d2d *FvwmPagerGeometry 110-1-1 *FvwmPagerLabel 0 "$[USER]@$[HOSTNAME]-$[OS]" *FvwmPagerSmallFont 5x8 ##########################FvwmWinList################################## *FvwmWinListBack #908090 *FvwmWinListFore Black #*FvwmWinListFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-* *FvwmWinListAction Click1 Iconify -1,Focus *FvwmWinListAction Click2 Iconify *FvwmWinListAction Click3 Module "FvwmIdent" FvwmIdent *FvwmWinListUseSkipList *FvwmWinListGeometry +0-1 *FvwmBackerDesk 0 -solid steelblue *FvwmBackerDesk 1 -solid midnightblue *FvwmScrollBack grey40 *FvwmScrollFore green ############################################################ ############################################################ # Note that icons are shown in the module # only if NoIcon commnand is applied. #Style "*" NoIcon ############################################################ *FvwmIconBoxIconBack #cfcfcf *FvwmIconBoxIconHiFore black *FvwmIconBoxIconHiBack LightSkyBlue *FvwmIconBoxBack #5f9ea0 #*FvwmIconBoxFore blue *FvwmIconBoxGeometry 5x1+0+0 *FvwmIconBoxMaxIconSize 64x38 #*FvwmIconBoxFont -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-* *FvwmIconBoxSortIcons IconName *FvwmIconBoxPadding 4 *FvwmIconBoxLines 10 *FvwmIconBoxSBWidth 11 *FvwmIconBoxPlacement Left Top *FvwmIconBoxPixmap fvwm.xpm #*FvwmIconBoxHideSC Horizontal *FvwmIconBoxSetWMIconSize *FvwmIconBoxHilightFocusWin #*FvwmIconBoxResolution Desk *FvwmIconBoxMouse 1 Click RaiseLower *FvwmIconBoxMouse 1 DoubleClick Iconify *FvwmIconBoxMouse 2 Click Iconify -1, Focus *FvwmIconBoxMouse 3 Click Module FvwmIdent *FvwmIconBoxKey r RaiseLower *FvwmIconBoxKey space Iconify *FvwmIconBoxKey d Close *FvwmIconBoxKey n Next *FvwmIconBoxKey p Prev *FvwmIconBoxKey h Left *FvwmIconBoxKey j Down *FvwmIconBoxKey k Up *FvwmIconBoxKey l Right # # Icon file specifications # # Mostly, you don't have to specify icon files, as FvwmIconBox now # reads icon files specified in Style commands. # *FvwmIconBox "Fvwm*" - # FvwmForm alias - rlogin or telnet to host via xterm *RloginWarpPointer #*RloginFont *helvetica*m*r*n*12* #*RloginButtonFont *helvetica*m*o*n*12* #*RloginInputFont *cour*m*r*n*12* *RloginFore Black *RloginBack White *RloginItemFore Yellow *RloginItemBack Wheat # begin items *RloginLine center *RloginText "Login to Remote Host" *RloginLine center *RloginText "Host:" *RloginInput HostName 30 "" *RloginLine center *RloginSelection meth single *RloginChoice TN TN off "telnet" *RloginChoice RL RL on "rlogin" *RloginSelection UserSel single #*RloginChoice Default Default on "same user" #*RloginChoice Custom Custom off "user:" *RloginText "(Userid:" *RloginInput UserName 10 "" *RloginText ")" *RloginLine center *RloginText "FG:" *RloginInput FgColor 15 "" *RloginText "BG:" *RloginInput BgColor 15 "" *RloginLine expand *RloginButton quit "Login" ^M *RloginCommand Exec xterm $(FgColor?-fg $(FgColor)) \ $(BgColor?-bg $(BgColor)) -T xterm@$(HostName) \ -e $(RL?rlogin) $(TN?telnet) $(HostName) $(RL?-8 \ $(UserName?-l $(UserName))) *RloginButton restart "Clear" *RloginCommand Beep *RloginButton quit "Cancel" *RloginCommand Nop # FvwmForm alias - query exit ala mwm *QuitVerifyGrabServer *QuitVerifyWarpPointer #*QuitVerifyFont *helvetica*m*r*n*14* #*QuitVerifyButtonFont *helvetica*m*o*n*14* #*QuitVerifyButtonFont 7x13bold *QuitVerifyFore Black *QuitVerifyBack Light Gray *QuitVerifyItemFore Wheat *QuitVerifyItemBack Gray50 # begin items *QuitVerifyLine center *QuitVerifyText "Do you really want to exit FVWM?" *QuitVerifyLine expand *QuitVerifyButton quit " Exit " *QuitVerifyCommand Quit *QuitVerifyButton quit "Cancel" *QuitVerifyCommand Nop # MyTalk & MyFvwmTalk from Dave Goldberg # MyTalk Form - dissappears after use *MyTalkWarpPointer #*MyTalkFont *helvetica*m*r*n*14* #*MyTalkButtonFont *helvetica*m*o*n*14* #*MyTalkInputFont *cour*m*r*n*14* *MyTalkFore Red *MyTalkBack Gray *MyTalkItemFore Blue *MyTalkItemBack Gray *MyTalkLine center *MyTalkText "Fvwm Function" *MyTalkInput Func 40 "" *MyTalkLine expand *MyTalkButton quit "Run" ^M *MyTalkCommand $(Func) *MyTalkButton restart "Clear" ^R *MyTalkButton quit "Cancel" ^C *MyTalkCommand Nop # MyFvwmTalk Form - sticks around *MyFvwmTalkWarpPointer #*MyFvwmTalkFont *helvetica*m*r*n*14* #*MyFvwmTalkButtonFont *helvetica*m*o*n*14* #*MyFvwmTalkInputFont *cour*m*r*n*14* *MyFvwmTalkFore Red *MyFvwmTalkBack Gray *MyFvwmTalkItemFore Blue *MyFvwmTalkItemBack Gray *MyFvwmTalkLine center *MyFvwmTalkText "Fvwm Function" *MyFvwmTalkInput Func 40 "" *MyFvwmTalkLine expand *MyFvwmTalkButton restart "Run" ^M *MyFvwmTalkCommand $(Func) *MyFvwmTalkButton restart "Clear" ^R *MyFvwmTalkCommand Nop *MyFvwmTalkButton restart "Iconify" ^Z *MyFvwmTalkCommand Next [MyFvwmTalk] Iconify *MyFvwmTalkButton quit "Quit" ^C *MyFvwmTalkCommand Nop # to change banner pixmap #*FvwmBannerPixmap fvwm3.xpm #*FvwmBannerTimeout 2 [user@host ~]$
Как можно было заметить, я использую векторные шрифты почти везде. Это даёт мне возможность видеть правильные названия кириллических имён директорий в заголовках окон под OpenBSD.
Локальный файл конфигурации FVWM
Этот файл уже использует значения из предыдущего "общего" файла и поэтому значительно короче.
............................ == Книга Товита == ................................ === Глава 13, Стих 6 === 6 Если вы будете обращаться к Нему всем сердцем вашим и всею душею вашею, чтобы поступать пред Ним по истине, тогда Он обратится к вам и не скроет от вас лица Своего. Увидите, что Он сделает с вами. Прославляйте Его всеми _глаголами_ уст ваших и благословляйте Господа правды и превозносите Царя веков. В земле плена моего я прославляю Его и проповедую силу и величие Его народу грешников. Обратитесь, грешники, и делайте правду пред Ним. Кто знает, может быть, Он возблаговолит о вас и окажет вам милость? 7 Превозношу я Бога моего, и душа моя - Небесного Царя, и радуется о величии Его. (b+/b-, c+/c-, +/-, *) > [user@host ~]$ cat .fvwm/config # Process system-wide configuration file first. Read /home/user/.fvwm/system_wide_fvwmrc # My local changes DeskTopSize 2x2 # I want my terminal windows to stand out Style "xterm" HilightFore #dd0000, HilightBack darkgreen, \ Font "xft:Liberation Mono:style=Bold Italic:size=16:antialias=true" Style "*" ClickToFocus Style "xclock" Borderwidth 3,NoTitle,StaysOnTop,Sticky,ActivePlacement # Some changes to the menu. Key F2 A M Menu Window-Ops2 AddToMenu RootMenu + "&Web%mini.netscape.xpm%" Exec exec firefox + "&Clock%jclock.xpm%" Exec exec xclock -d -strftime "%a %b %d - %H:%M" \ -render -face "Bitstream Charter :style=Bold Italic:size=18:antialias=true" \ -bg black -fg green + "&Lynx%jwindow.xpm%" Exec exec xterm -e lynx -term=vt100 -nocolor Module FvwmAuto 001 Raise Nop Module FvwmBacker # I could use xsetroot, but it does not understand "png" files. *FvwmBackerDesk 0 Exec exec fvwm-root ~/Downloads/Roses_Evelin_2013.png # Keyboard shortcuts, using Ctrl+Alt. # These 2 apply only to xterm windows. Key n A CM Next [xterm*] FlipFocus Key p A CM Prev [xterm*] FlipFocus # Applies to all windows. Key m A CM Maximize Key l A CM Exec exec xlock -mode coral # Re-defining main config file's setting here. Key n A CSM Next [*] Focus Key p A CSM Prev [*] Focus Key t A CM Exec exec xterm [user@host ~]$
Я продолжаю использовать векторные шрифты, указывая "xft:" в начале имени, также я добавляю несколько полезных команд в конец меню пользователя.
Первый запуск нового FVWM
Первый запуск нового диспетчера окон я произвожу с включением отладочных сообщений и проверяю содержимое выходного файла на предмет ненайденных шрифтов, старых опций в конфигурации и т.п. Обратите внимание - включение отладки замедляет работу FVWM!
# Команда для первого запуска FVWM со включённой отладкой: /home/user/fvwm/bin/fvwm -D >/tmp/fvwm.out 2>&1
Все последующие запуски должны выполняться в нормальном режиме. Это означает, что моя окончательная версия файла "~/.xsession" выглядит так:
# Окончательная версия файла "~/.xsession" # для запуска нового диспетчера окон FVWM. # Использует только локальные конфигурационные # файлы "~/.fvwm/system_wide_fvwmrc" и # " ~/.fvwm/config". export PATH=/home/user/fvwm/bin:$PATH export HOSTNAME=`hostname -s` export OS=`uname` fvwm -V > /tmp/fvwm.out xrdb -load $HOME/.Xresources xterm -g 80x25+0+0 & /home/user/fvwm/bin/fvwm # DEBUG -D >>/tmp/fvwm.out 2>&1
Как видим, скрипт "~/.xsession" использует приведенный ниже файл ресурсов "~/.Xresources", определяющий вид и поведение моих Х приложений:
! Окончательная версия файла "~/.Xresources" ! для запуска нового диспетчера окон FVWM. XTerm*loginShell:true XTerm*vt100.activeIcon:false XTerm*iconGeometry:48x48+0+0 XTerm*iconHint:mini.xterm_48x48.xpm XTerm*faceName:"DejaVu Sans Mono" XTerm*faceSize:15.0 XTerm*cursorBlink:true XTerm*cursorColor:red XTerm*cursorOffTime:300 XTerm*cursorOnTime:1900 XTerm*background:black XTerm*foreground:green XTerm*saveLines:3000 XTerm*scrollBar:false XTerm*locale:false XTerm*utf8:always Xft.dpi: 96 Xft.hinting: 1 Xft.hintstyle: hintmedium Xft.antialias: 1 XClock*Font = "xft:Bitstream Vera Sans Mono:size=8:antialias=true"
Беспроводное сетевое подключение - Fedora
Современные Linux системы повсеместно используют Network Manager для сетевых подключений. Если мне необходимо подключиться к WiFi и при этом не использовать никаких Gnome-applets, я выполняю такую последовательность команд:
nm-connection-editor - создание и конфигурация подключения nmcli con list - увидеть существующие в системе подключения nmcli con up id enp0s25 - подключить интерфейс к сети nmcli con status id enp0s25 - проверить соединение
Ниже я приведу скрипт, показывающий как это делается.
Беспроводное сетевое подключение - OpenBSD
В ОпенБСД сетевые подключения по-прежнему устанавливаются командой "ifconfig", что делает весь процесс простым и понятным. Вот последовательность команд для установки WiFi соединения в OpenBSD.
ifconfig iwn0 scan -- найти сеть ifconfig iwn0 up nwid Hans wpakey ThisIsSupposedToBeSecret! -- подключиться dhclient iwn0 -- получить динамический IP и всю остальную информацию ifconfig -- проверить подключение route -n show -- убедиться что мы можем посылать и принимать пакеты
Отсутствие зависимости от Network Manager делает процесс подключения понятным и позволяет нам быстро изменять (и скриптовать) его так, как нужно.
Фоновое изображение экрана Xorg
В системе X Window "обои рабочего стола" представляют из себя всего лишь обычный графический файл, отображённый в "корневом" окне. Любая программа, способная изменить это изображение в "root window" может быть использована для установки фонового изображения рабочего стола.
Используя FVWM, я полагаюсь на входящую в его состав программу "fvwm-root", подключаемую посредством модуля расширения "FvwmBackerDesk".
Но я могу изменить фоновое изображение экрана даже если я не использую никакого диспетчера окон. Именно так, например, я изменяю фоновую картинку для окна входа в систему XDM:
xv -rmode 2 -quit Pictures/mountain-panorama.jpg
Показанный выше пример файла ".xinitrc" использует эту команду для смены фона окна при ручном запуске Х посредством скрипта "startx". Чтобы установить фоновую картинку при входе в систему через XDM, я изменяю файл "/etx/X11/xdm/Xsetup_0":
.... == Второе послание к Коринфянам святого апостола Павла == ....... === Глава 5, Стих 19 === 18 Все же от Бога, Иисусом Христом примирившего нас с Собою и давшего нам служение примирения, 19 потому что Бог во Христе примирил с Собою мир, не вменяя _людям_ преступлений их, и дал нам слово примирения. (b+/b-, c+/c-, +/-, *) > [user@host ~]$ cat /etx/X11/xdm/Xsetup_0 #!/bin/sh # $OpenBSD: Xsetup_0,v 1.3 if [ "$DISPLAY" = ":0" -o "$DISPLAY" = ":0.0" ] then /usr/local/bin/xv -root -geometry 1600x900 -quit ~/Pictures/Roses_2013.png xconsole -geometry 480x130-0-0 -daemon -notify -verbose -fn fixed -exitOnFail fi #sxpm OpenBSD.xpm & [user@host ~]$
Прочтите документацию программы "XV" в виде PDF файла, предлагаемую на вебсайте проекта - раздел "12.6: Root Window Options" поясняет значение разных "rmodes". Некоторые из них ("зеркальные") изменяют изображение действительно интересно.
Более одного монитора на столе
Сервер Xorg имеет расширение (extension) RandR, поставляемое с программой "xrandr". Эта программа позволяет нам оперировать расположением и настройками мониторов, не изменяя конфигурационный файл Х сервера. Более того, сегодня сервер Xorg настолько полагается на правильность работы RandR, что не имеет такого файла - конфигурация Х дисплея выполняется "на лету".
Эта же программа "xrandr" даёт нам необходимую гибкость при организации работы на нескольких физических мониторах. Просто введя её, мы увидим текущую конфигурацию нашего Х дисплея. Вот последовательность команд для организации рабочего пространства на двух мониторах:
xrandr --output LVDS1 --left-of DP1 xrandr --output DP1 --pos 0x0 xrandr --output LVDS1 --pos 1680x0
Обратитесь к документации (man xrandr) за детальным объяснением всех опций. Я использую эту программу в приведенном ниже "скрипте пользователя".
Русская фонетическая клавиатура
Не всем пользователям Русского языка удаётся работать на компьютерах с русской клавиатурой - именно поэтому существует фонетическая раскладка, удобство и полезность которой просто невозможно переоценить. Включается она тоже очень просто, используя стандартное расширение Xorg под названием "XKB".
# Помещается в startup файл, например ".profile" # Смотрите файл /usr/share/X11/xkb/symbols/ru setxkbmap -layout 'us,ru(phonetic)' -option 'grp:shifts_toggle,grp_led:caps'
Недавно разработчики Gnome решили "переопределить" назначение некоторых клавиш в русской раскладке (ч,ю,я,ь,ё,ъ), что привело к полной путанице. Используя "setxkbmap" как показано выше я всегда нахожу свои "фонетические" русские буквы на уже привычных местах, и под Linux, и под OpenBSD.
Подсветка (яркость) и копии экрана
Такая вроде бы тривиальная задача как уменьшение яркости экрана или копирование его содержимого (или одного окна) в графический файл может показаться невозможной без использования функций Gnome. Решение очень просто:
xbacklight -set 35 -- устанавливает яркость подсветки экрана на 35% gimp -- программа используется для снятия копии окна
"Личные" конфигурационные скрипты пользователя
Мне нравится работать с системой, конфигурация которой мне понятна и может быть легко изменена. Для этого я создаю маленькие скрипты для установки моего рабочего окружения - для дома, работы, проектора или домашнего кинотеатра.
Такой подход позволяет мне иметь "конфигурацию по умолчанию" для лаптопа без всякой периферии. Когда я прихожу на работу и подключаю внешние монитор, клавиатуру и мышь - я запускаю соответствующий скрипт. Для меня это просто и понятно, и я всегда точно знаю где и что изменять при необходимости. Кроме того я всегда помню как работает именно сама система, а не "как использовать Гном".
Ниже я привожу мой скрипт для рабочего окружения.
........................ == Книга Иова == ............................ === Глава 8, Стих 13 === 13 Таковы пути всех забывающих Бога, и надежда лицемера погибнет; 14 упование его подсечено, и уверенность его -- дом паука. (b+/b-, c+/c-, +/-, *) > [user@host ~]$ cat ~/work_setup_script.sh #!/bin/bash # Work script - read-and-think.org # Setting two screens - # Dell 1680x1050, DisplayPort (left) and Laptop 1600x900 (right) xrandr --output DP1 --pos 0x0 --primary xrandr --output LVDS1 --pos 1680x100 # Setting the wallpaper across both screens xv -rmode 2 -quit ~/Pictures/mountain-panorama.jpg # Connect the Ethernet network nmcli con up id enp0s25 # Check connection if (nm-online) then echo "Connected!" else echo "No Network!" fi # I do not have Russian keyboard at work. setxkbmap -layout 'us,ru(phonetic)' -option 'grp:shifts_toggle,grp_led:caps' # End of script
Если вы подключите другую клавиатуру в USB порт, команда "setxkbmap" должна быть запущена повторно.
В заключение
Я надеюсь, что эта заметка поможет читателю понять некоторые полезные но забытые тонкости работы современных UNIX-like систем, скрытые от обычного пользователя сложностями реализации графических оболочек. Мне нравится иметь простое и одинаковое рабочее окружение на многих машинах с разными ОС и я буду рад если мой опыт поможет и вам.
Спасибо что зашли,
Будьте благословенны!
Денис
24 Октября 2013 года.