Установил StumpWM - последнее, что мне не хватало для полного счастья. Лично для себя перепостю инструкцию по установке из вики с некоторыми моими (ubuntu 10.04) исправлениями и дополнениями.

Есть нечто что делает Emacs особенным текстовым редактором, так вот - это же нечто делает StumpWM особенным оконным менеджером. (c) Bill Clementson

StumpWM это тайловый оконный менеджер, который отличается следующими особенностями:

<ol> <li>Это оконный менеджер полностью написанный на Common Lisp. При его запуске (startx) создаётся полноценный lisp-runtime с доступом к REPL и с возможностью обновить как конфигурацию менеджера так и сам его код в "горячем" режиме.</li> <li>Это именно просто оконный менеджер, а не рабочее окружение (подобно XFCE, Gnome или KDE). Следовательно, он может использоваться как основа объединяющая разрозненные программы (emacs, например, консоль, и т.п.), а также может работать в качестве менеджера окон какого-либо рабочего окружения, например, Gnome.</li> <li>Это keyboard-driven менеджер окон, т.е. предполагается, что большинство операций с окнами проделываются при помощи клавиатурных комбинаций.</li> <li>Это тайловый оконный менеджер, как было сказано, - он берет на себя заботу о том как именно будут располагаться окна (если не задать явно другого поведения).</li> </ol>

Инсталляция

Естественней всего использовать StumpWM в связке с SBCL. StumpWM присутствует в репозиториях большинства дистрибутивов, но не заводится, поэтому тут будет рассмотрен ручной способ установки - последней версии из git. Итак, вот небольшой файл, который будет делать всю необходимую работу:

<source lang="lisp"> ;;; ;;; Little `script' for install StumpWM in SBCL environment: ;;; ;;; sbcl –load stumpwm-install.lisp ;;;

(in-package #:cl-user)

;;; Emb. shell ;;; (set-dispatch-macro-character #\# #\s #'(lambda (stream sub-char numarg) (declare (ignore sub-char numarg)) (let (chars) (do ((prev (read-char stream) curr) (curr (read-char stream) (read-char stream))) ((and (char= prev #\#) (char= curr #\#))) (push prev chars)) (let ((asdf::*verbose-out* standard-output)) (asdf:run-shell-command (coerce (nreverse chars) 'string))))))

;;; Little shell script there ;;; #s DIR=`pwd` if [ -d "stumpwm" ] ; then cd stumpwm git pull -f cd ${DIR} else git clone git://git.savannah.nongnu.org/stumpwm.git fi if [ -f "stumpwm/module.lisp.in" ] ; then mv stumpwm/module.lisp.in stumpwm/module.lisp fi if [ -f "stumpwm/version.lisp.in" ] ; then mv stumpwm/version.lisp.in stumpwm/version.lisp fi ## ;;; Make executable stumpwm image ;;; (load "stumpwm/stumpwm.asd") (asdf:oos 'asdf:load-op :stumpwm) (sb-ext:save-lisp-and-die "stumpwm.bin"

:executable t

:toplevel #'(lambda () (stumpwm:stumpwm ":0"))) </source>

Тут показан простой способ встроить shell сценарии в лисп-код с помощью макросов чтения, к примеру:

<source lang="lisp"> CL-USER> #s pwd ## ; $ pwd /home/treep/devel/lisp 0 </source>

После запуска

<source lang="lisp"> sbcl –load stumpwm-install.lisp </source>

будет создан git-репозиторий, исходный код будет скомпилирован и сохранён в образ.

При повторном запуске

<source lang="lisp"> sbcl –load stumpwm-install.lisp </source>

git-репозиторий будет по необходимости обновлён (pull), а образ - пересобран снова.

После этого нужно положить образ stumpwm.bin в удобное место. Я не парился и оставил в HOME :)

Пишем в файл ~/.xinitrc строчку

<source lang="bash"> exec /path/to/stumpwm </source>

Теперь завершите сеанс (если вы можете это сделать :) если нет - нужно перезагрузится, или остановить gdm (gdm stop))

<source lang="bash"> killall gdm-binary startx </source>

И мы оказываемся в "голом" StumpWM. Эти операции можно проделывать на tty1-6 в момент logon screen - дальше можно ловить ошибки в ~/.xsession-errors

StumpWM и Gnome

Чтобы использовать StumpWM как независимый менеджер окон в среде Gnome нужно совершить следующие действия:

<ol> <li>Убедится, что вход в систему осуществляется через GDM и его меню выбора сессий (механизм xsessions). В gentoo нужно поступить согласно <a href="http://www.gentoo.org/doc/ru/gnome-config.xml">http://www.gentoo.org/doc/ru/gnome-config.xml</a></li> <li>На всякий случай: <code>gconftool-2 -u /desktop/gnome/session/requiredcomponents/windowmanager</code><li> <li>sudo mkdir /etc/X11/sessions</li> <li>Записать в файл /etc/X11/sessions/Xsessions.desktop следующее:</li>

<source lang="init"> [Desktop Entry] Name=Xsession Comment=This runs ~/.xsession Exec=/etc/X11/Xsession </source>

<li>В файле ~/.xsession написать</li>

<source lang="bash"> export WINDOWMANAGER="/path/to/stumpwm" exec gnome-session </source>

Вот и всё, однако это хоть и StumpWM в Gnome окружении - это не типичный Gnome - так шрифты будут выставлены по-умолчанию (скверно :), а гномовские панели могут отсутствовать. Хотя у меня и с тем и другим было все в порядке. Панели можно запустить с помощью <code>gnome-panel & </code> (но и тут может потребоваться напильник :)

О чём не было сказано

<code>~/.stumpwmrc</code> - конфигурационный файл (на Common Lisp), позволяющий настроить любое необходимое поведение.