Вопрос или проблема
После создания файла timidity.service
и соответствующей символической ссылки для автоматического запуска сервиса при перезагрузке системы я перезагрузил систему и ввел следующую команду:
sudo systemctl status timidity
Вывод:
× timidity.service - TiMidity++ Daemon
Loaded: загружен (/lib/systemd/system/timidity.service; отключен; предустановленный вариант: включен)
Active: не работает (Результат: код выхода) с Пн 2024-10-07 16:34:46 CEST; 50 секунд назад
Process: 635 ExecStart=/usr/bin/timidity -iA Os (код=выход, статус=1/НЕУДАЧА)
Main PID: 635 (код=выход, статус=1/НЕУДАЧА)
CPU: 31ms
ott 07 16:34:46 netcom-Vostro-15-3510 systemd[1]: Запуск TiMidity++ Daemon завершен.
ott 07 16:34:47 netcom-Vostro-15-3510 timidity[635]: jack_client_new: устарело
ott 07 16:34:47 netcom-Vostro-15-3510 timidity[635]: Не удается подключиться к серверному сокету, ошибка = Нет такого файла или директории
ott 07 16:34:47 netcom-Vostro-15-3510 timidity[635]: Не удается подключиться к каналу запросов сервера
ott 07 16:34:47 netcom-Vostro-15-3510 timidity[635]: jack-сервер не запущен или не может быть запущен
ott 07 16:34:47 netcom-Vostro-15-3510 timidity[635]: JackShmReadWritePtr::~JackShmReadWritePtr - Инициализация не выполнена для -1, пропускаем освобождение
ott 07 16:34:47 netcom-Vostro-15-3510 timidity[635]: JackShmReadWritePtr::~JackShmReadWritePtr - Инициализация не выполнена для -1, пропускаем освобождение
ott 07 16:34:47 netcom-Vostro-15-3510 timidity[635]: Не удалось открыть выходное устройство
ott 07 16:34:46 netcom-Vostro-15-3510 systemd[1]: timidity.service: Главный процесс завершился, код=выход, статус=1/НЕУДАЧА
ott 07 16:34:46 netcom-Vostro-15-3510 systemd[1]: timidity.service: Завершился с результатом 'код выхода'.
Мое имя пользователя связано с группой audio
.
Символическая ссылка:
/usr/lib/systemd/system/multi-user.target.wants/timidity.service
Сервис:
/usr/lib/systemd/system/timidity.service
Содержит:
[Unit]
Description=TiMidity++ Daemon
After=sound.target
Requires=sound.target
[Service]
ExecStart=/usr/bin/timidity -iA Os
Type=simple
[Install]
WantedBy=multi-user.target
Я также пробовал изменить файл “timidity.service” на следующий:
[Unit]
Description=TiMidity++ Daemon
After=pulseaudio.service
Requires=pulseaudio.service
[Service]
ExecStart=/usr/bin/timidity -iA Os
Type=simple
[Install]
WantedBy=multi-user.target
Но после повторной перезагрузки системы ошибка остается прежней.
При попытке вручную запустить сервис из терминала, когда система уже запущена, сервис запускается правильно.
Что я делаю не так?
Ответ или решение
Проблема, с которой вы сталкиваетесь, заключается в том, что сервис timidity.service
не может подключиться к серверу JACK при запуске на старте системы. Когда вы запускаете его вручную после загрузки системы, он работает корректно, что указывает на то, что необходимые компоненты уже активированы в этот момент.
Существует несколько шагов для устранения этой проблемы:
Шаг 1: Проверьте зависимости JACK
Сервис timidity
требует, чтобы сервер JACK был запущен до его активации. Однако, как видно из ваших логов, JACK не запущен. Ниже приведены рекомендации по устранению этой проблемы:
-
Убедитесь, что JACK установлен. Используйте следующую команду для проверки:
jackd -v
Если JACK не установлен, установите его:
sudo apt install jackd
-
Настройте автоматический запуск JACK. Вы можете использовать
qjackctl
(графический интерфейс управления JACK) или включить автозапуск сервера JACK через systemd.Создайте файл сервиса для JACK:
sudo nano /etc/systemd/system/jack.service
Добавьте следующий контент:
[Unit] Description=JACK Audio Connection Kit After=multi-user.target [Service] ExecStart=/usr/bin/jackd -d dummy Type=simple [Install] WantedBy=multi-user.target
Затем активируйте и запустите его:
sudo systemctl enable jack.service sudo systemctl start jack.service
Шаг 2: Обновление timidity.service
Вернитесь к вашему файлу timidity.service
. Убедитесь, что вы указали правильные зависимости и порядок запуска:
[Unit]
Description=TiMidity++ Daemon
After=jack.service
Requires=jack.service
[Service]
ExecStart=/usr/bin/timidity -iA Os
Type=simple
[Install]
WantedBy=multi-user.target
Шаг 3: Активируйте изменения
После внесения изменений в .service
файлы выполните команды для перезагрузки даемонов и повторной активации сервиса:
sudo systemctl daemon-reload
sudo systemctl enable timidity.service
Шаг 4: Проверьте статус
Перезагрузите систему и проверьте статус сервиса:
sudo systemctl status timidity.service
Если проблемы сохраняются, вы можете просмотреть логи с помощью команды:
journalctl -u timidity.service
Заключение
Следуя представленным шагам, вы создадите зависимость сервиса TiMidity от JACK, что позволит ему успешно запускаться при старте системы. Обратите внимание, что для корректной работы звук должен быть правильно настроен в системе. Если будут дополнительные проблемы, вы можете рассмотреть другие механизмы управления звуком, такие как PulseAudio, в зависимости от ваших потребностей.