Ну, во-первых, hook 2 раза писать не надо – он и с 1-го разу навесил на add pad. Увы, всё не так просто – попробуйте запустить на 1-м воркспейсе что-нибудь по-тяжеловеснее, и Вы поймете, о чём я – Musca не ждёт появления окна после старта приложения, и если оно долго грузится – норовит влезть не в свою группу.
Однако же, дилема :)
Тем временем, я решил проиллюстрировать работу Musca через pipe, и, заодно, решить проблему с раскидыванием приложений по рабочим группам при автостарте. Написал вот скриптик, ожидающий, пока не запустятся все приложения данной группы, после чего переходящий к загрузке группы следующей. Получилось кривовато, и не без багов – я не оч. хорошо знаю shell скриптинг, точнее, почти не знаю ^-^
#!/bin/sh
#SYNOPSIS: iexec.sh <musca_dump> [<any commands to run...>] <last command>
#TODO: скриптик ненадёжен, имеет баг -- имена команд должны быть без пробелов -- так что используйте для запуска приложений с параметрами alias или скрипты; также при сравнении дампа и списка текущих окон -- имеет значение порядок окон, что может очень мешать -- рабочая группа не распознается как загруженная
#проверяем наличие аргументов
if [ $# -gt 1 ]
then
#проверяем доступ к файлу дампа
    if test -r $1
    then
#добавляем группу, загружаем текущий дамп
	echo "add someone" | musca -i
	echo "load "${1} | musca -i
#запускаем приложения
	x='$'$#
	eval x=$x
	for i in "[email protected]"
	do
	    if [ "$i" != "$1" -a "$i" != "$x" ]
	    then
		"$i" &
	    fi
	done
#проверяем -- сходятся ли названия окон дампа и текищее до тех пор, пока не сойдутся
         dump=`cat $1 | grep window | cut -f 4- | sed -e 's/\tunknown//'`
         current=`musca -c "show windows" | cut -d \  -f 3-`
        until [ "$dump" = "$current" ]
        do
	    sleep 0.1
            current=`musca -c "show windows" | cut -d \  -f 3-`
#	    echo "not done..."
        done
#	echo "It's done!"
#при совпадении всех окон -- запускаем последний аргумент
	exec "$x"
    else
        echo "Can't read dump file!"
    fi
else
    echo "Necessary Musca dump name and no less one started program!"
fi
После чего добавил в ~.musca_start
exec ~/.bin/iexec.sh .musca_dump/work ~/.bin/strtjack ~/.bin/emacs_sc.sh ~/.bin/iexec2.sh
Где iexec2.sh – это всего-лишь запуск того же iexec.sh для другой группы (см. баг – получившееся ограничение на пробелы)
Если кто знает shell – было бы неплохо довести это до ума ;)
К сожалению, с Ratpoison я не так хорошо знаком. Основной функционал я описал, так что, было бы интересно услышать мнение человека, работавшего в Ratpoison и хорошо знакомого с ним; у меня, увы, нет свободного времени на их сравнительный анализ.
Естественно, для работы с SC требуются элементарные знания звукотехники, но не нужно быть гением, чтобы понимать Преобразование Фурье, например. Тем, кто еще не пробовал себя в звукосинтезе – рекомендую для начала модульные синтезаторы, коих под Linux, конечно, есть. Как-то: gAlan, Spiral Synth, ALSA Modular synth, Ingen (много их) Более продвинутых могут заинтересовать языки визуального алгоритмического звукосинтеза: Pure Date, JMax. Также существуют алгоритмические секвенсоры AlgoScore и KyCE (да-да, есть под Linux и такое). Да и SuperCollider, конечно, не одинок – CSound, Chuck, Q_mus, Faust (и это только самые известные из них)
Для тех, кто, всё-же выберет изучение Super Collider – выложил учебник.
Итак, предположим, самые стойкие, преодолев сий тернистый путь, задались вопросом – а как всё это работает, как теперь извлечь хоть какой-нибудь звук. Итак! Загрузившись с rt-ядра, запустив jackd в rt режиме, теперь – запускаем emacs в режиме SCLang.
Теперь – в EMACS – жмём C-c C-l (Ctrl+c и Ctrl+l – правда весело?), после чего sclang загрузит Super Collider, и подключится к jack. Всё! Можно писать код своего музыкального шедевра. Запускается каждая строчка кода сочитанием C-c C-c (Ctrl+c два раза подряд). Код для примера:
Server.default = s = Server.internal.boot;
{SinOsc.ar(LFNoise0.ar([10,15],400,800),0,0.3)}.play;
Первая строчка запускает звуковой сервер, вторая – начинает воспроизведение…довольно странного звука ;)
Тем, кому надоест слушать мой шедевр, подскажу – выключить всё это можно набрав M-x sclang-stop.

Настоянельно рекомендуемая информация для дополнительного ознакомления:
тут, и, особенно, тут: /usr/share/SuperCollider/Help/Linux/EmacsEditor.html
А теперь – самое интересное :) – ставим SuperCollider. Если повезёт – из AUR, нет – просим у h4rtr3d'а ;)
(как оказалось, для работы программа требует avahi, хотя как зависимость, оно почему-то не тянется, так что будьте осторожны). После установки необходимо настроить – SuperCollider для EMACSа и EMACS для SuperCollider'а ;D
Итак, находим в исходниках linux/examples/{sclang.cfg.in, sclang.sc} и копируем их в ~/{.sclang.cfg, .sclang.sc} соответственно. Далее – правим под свои нужды. Если кому лень рыться в исходниках – выкладываю свои конфиги – на данный момент они должны работать в Arch Linux (хотя бывает всякое).
// =====================================================================
// file:		sclang.sc
// content:		example sclang startup file
// author:		stefan kersten <[email protected]>;
// =====================================================================
// NOTE:		this is just an example not needed for
//				regular operation of sclang!
// =====================================================================
// set up Server to use a different executable
Server.program = "/usr/bin/scsynth";
// same for Score
Score.program = Server.program;
// set some server options for a different setup
#[\internal, \local].do { |s|
	s = Server.perform(s);
	s.options.numInputBusChannels = 2;
	s.options.numOutputBusChannels = 5;
};
// hook up jack ports to audio channels
"SC_JACK_DEFAULT_INPUTS".setenv(
	"system:capture_1,"
	"system:capture_2"
);
"SC_JACK_DEFAULT_OUTPUTS".setenv(
	"system:playback_1,"
	"system:playback_2,"
//	"system:playback_3"
//	"system:playback_4,"
//	"system:playback_5"
);
// EOF
# ======================================================================
# file:		sclang.cfg
# content:	SuperCollider library configuration file
# author:	stefan kersten <[email protected]>;
# ======================================================================
# usage:	install as /etc/sclang.cfg or ~/.sclang.cfg
# ======================================================================
# default class library
+/usr/share/SuperCollider/SCClassLibrary
# system-wide extensions
+/usr/share/SuperCollider/Extensions
# in case you don't want to use add-on libraries, uncomment as necessary
#-/usr/share/SuperCollider/SCClassLibrary/crucial
#-/usr/share/SuperCollider/SCClassLibrary/JITLib
# EOF
Теперь настраиваем EMACS ;D !!!
Достаточно в .emacs вписать
(require 'sclang)
Теперь все открываемые файлы с расширением *.scd будут использовать режим SCLang
Для загрузки режима для любого открытого файла можно использовать M-x sclang-mode (Жмём Alt+x и набираем sclang mode ; не забываем об автодополнении) Если не хочется редактировать конфиг EMACS'а – можно запустить как
emacs -sclang
Впрочем, если EMACS уже загружен без этой библеотеки – её можно догрузить M-x load-library RET sclang RET . На сим и остановлюсь, ибо необьятен EMACS в величии своём :D
А, поскольку это программа звукосинтеза в реальном времени – начну с того, как настроить систему для вменяемой работы с ней (ага, в этом месте все достают заготовленные напильники и бубны, заседание умелых ручек можно считать открытым).
Итак, нам потребуется ядро реального времени. Его сборка – тема отдельной статьи (если повезёт, можно даже поставить из AUR). Также не стоит забывать, что под новое ядро, возможно, придётся ставить и новые модули, например, проприетарные драйвера на видиоконтроллер. Разобравшись с ядром, следует поставить ограничения на PAM, вписав нужное в /etc/security/limits.conf (когда-то я уже это делал) и не забыть проверить инициализацию PAM в любимом login manager (раскомментировать в /etc/pam.d/<ваш_любимый_LM> всё нужное).
Теперь ставим аудиосервер jack. Его настройка уже сильно зависит от имеющегося железа, единственное требование – запустить его в режиме реального времени с наименьшей задержкой, но достаточным буффером, чтобы избавиться от рипения. У меня он показывает хороший результат при запуске
jackd -Rv -p512 -d alsa -dhw:0 -r48000 -p4096 -n2
Ну, и, конечно, потребуется редактор. Пожалуй, оптимальным тут будет EMACS 8) .
Super Collider, насколько я знаю – текстовый редактор, аудиосервер и интерпритатор одноимённого языка в одном флаконе (что несколько роднит его с EMACS ;) ), создан изначально под наиболее мультимидийную платформу MAC OS X под лицензией GPL, портирован на Linux (где может работать через редакторы gedit, emacs и vim) и win.
А вобще, это – язык алгоритмического звукосинтеза. ;D
Спасибо H4rtr3d' у – это, пожалуй, лучший подарок ко дню рождения 8)
~ % yaourt -Qs kernel                                                                                            
extra/autofs 5.0.4-4 
     A kernel-based automounter for Linux.
core/kernel-headers 2.6.30.1-1 (base)
     Kernel headers sanitized for use in userspace
core/kernel26 2.6.30.2-1 (base)
     The Linux Kernel and modules
core/kernel26-firmware 2.6.30-1 (base)
     The included firmware files of the Linux Kernel
local/kernel26rt 2.6.29.4_rt15-1 (archaudio-kernels archaudio-minimal archaudio-suite)
     The Linux Kernel and modules with realtime preemption
core/klibc-module-init-tools 3.8-1 (base)
     Utilities for inserting and removing modules from the Linux kernel
extra/libdrm 2.4.12-1 
     Userspace interface to kernel DRM services
core/module-init-tools 3.8-1 (base)
     utilities needed by Linux systems for managing loadable kernel modules
local/nvidia-96xx-rt 96.43.11-1 
     NVIDIA legacy drivers for kernel26rt, 96xx branch
Может дело в устаревшем ядре ???
Checking for pkg-config... yes
Checking for sndfile >= 1.0.16... yes
Checking for sndfile >= 1.0.18... yes
Checking for libcurl >= 7... yes
Checking for fftw3f... yes
Checking for jack >= 0.100... yes
Checking for avahi-client... yes
Checking for alsa... yes
Checking for C header file /System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h... no
Checking for C header file linux/input.h... no
Checking for C header file cwiid.h... no
Checking for C header file altivec.h... no
Checking for C header file xmmintrin.h... no
NOTICE: CPU has SSE support
Checking for C header file X11/Intrinsic.h... yes
Checking for XQueryPointer() in C library X11... yes
Checking for C function strtod()... yes
Похоже, оно не видит заголовочных файлов…
Думаете, стоит пересобрать последнюю версию ядра? Или поставить старые kernel-headers ? Или дело не в этом???