система ubuntu 12.04 x64
timidity запускается через /etc/init.d/timidity, и он добавлен в автозапуск.
физически он запускается следующей командой:
start-stop-daemon --start --chuid timidity --quiet --exec /usr/bin/timidity --pidfile /var/run/timidity/timidity.pid -- -Os -iAD < /dev/null >/dev/null 2>&1;
После загрузки компа midi не проигрываются, но если ввести руками в консоли sudo /etc/init.d/timidity start, то все запускается и работает.
После загрузки компа файл /var/run/timidity/timidity.pid обновляется, это навело меня на мысль, что демон запускается, но потом падает. Поэтому, я перенаправил вывод из /dev/null в файл и вот что получил:
Home directory /etc/timidity not ours.
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
Can't open pcm device 'default'.
Couldn't open ALSA pcm device (`s')
При этом после запуска руками содержимое файла следующее:
No protocol specified
xcb_connection_has_error() returned true
Home directory /etc/timidity not ours.
No protocol specified
Requested buffer size 32768, fragment size 8192
ALSA pcm 'default' set buffer size 30104, period size 3760 bytes
Т.е., такое впечатление, что при загрузке что-то еще недозагрузилось, или какой-то ресурс занят. Я пробовал гуглить - у людей проблема проявляется, то не только при запуске, а все время. В гугле так же советуют какие-то решения основанные pulseaudio, у меня ALSA. (вспоминаю pulseaudio как страшный сон) В гугле так же просят зачем-то вывод aplay -l. Так и не понял что он им дает, но по всей видимости он нужен для решения проблемы:
$ aplay -l
**** Список PLAYBACK устройств ****
карта 0: SB [HDA ATI SB], устройство 0: VT1708S Analog [VT1708S Analog]
Подустройства: 1/1
Подустройство №0: subdevice #0
карта 0: SB [HDA ATI SB], устройство 2: VT1708S Alt Analog [VT1708S Alt Analog]
Подустройства: 1/1
Подустройство №0: subdevice #0
карта 0: SB [HDA ATI SB], устройство 3: VT1708S Digital [VT1708S Digital]
Подустройства: 1/1
Подустройство №0: subdevice #0
карта 1: NVidia [HDA NVidia], устройство 3: HDMI 0 [HDMI 0]
Подустройства: 1/1
Подустройство №0: subdevice #0
карта 1: NVidia [HDA NVidia], устройство 7: HDMI 1 [HDMI 1]
Подустройства: 1/1
Подустройство №0: subdevice #0
Как бы узнать чего ему не хватает? Или лучше не парить мозг с этим init.d, а переделать, чтобы запускалось через upstart с перезапуском при падении?
Впринципе, есть вариант сделать скрипт:
sleep 10
/etc/init.d/timidity start
и запускать его через rc.local. Но вроде это как-то некошерно...