Вопрос или проблема
Как использовать Timidity на Ubuntu 18.04?
Timidity доступен в стандартном репозитории через sudo apt install timidity
, который включает в себя демон-сервис. Тем не менее, этот демон, похоже, не работает из коробки, так как Timidity не производит звук, а service timidity status
показывает несколько ошибок при взаимодействии с pulseaudio:
● timidity.service - LSB: запуск и остановка timidity
Загружен: загружен (/etc/init.d/timidity; сгенерирован)
Активен: активен (вышел) с Вс 2020-05-10 14:27:02 EDT; 1с назад
Документы: man:systemd-sysv-generator(8)
Процесс: 2407 ExecStop=/etc/init.d/timidity stop (код=вышел, статус=0/УСПЕХ)
Процесс: 2416 ExecStart=/etc/init.d/timidity start (код=вышел, статус=0/УСПЕХ)
10 мая 14:27:02 caius systemd[1]: Запуск LSB: запуск и остановка timidity...
10 мая 14:27:02 caius timidity[2416]: * Запуск эмуляции midi TiMidity++ ALSA...
10 мая 14:27:02 caius timidity[2416]: ...готово.
10 мая 14:27:02 caius systemd[1]: Запущен LSB: запуск и остановка timidity.
10 мая 14:27:02 caius pulseaudio[2448]: [autospawn] core-util.c: Домашний каталог недоступен: Отказано в разрешении
10 мая 14:27:02 caius pulseaudio[2448]: [autospawn] lock-autospawn.c: Не удалось получить доступ к блокировке автоспауна.
10 мая 14:27:02 caius pulseaudio[2448]: [pulseaudio] main.c: Не удалось получить блокировку автоспауна
Как это исправить?
Просто попробовал это на 20.04, и похоже, что пакет timidity
больше не включает в себя файл сервиса. Я попробовал некоторые ответы kyodake, и это отлично сработало, но вам не нужно использовать sudo!
Это также может помочь решить проблему первоначального автора поста, поскольку кажется, что пользователь, пытающийся запустить timidity, не имеет доступа к тому домашнему каталогу, куда timidity хочет поместить файл (возможно, пакет создал сервисного пользователя без домашнего каталога). Этот метод делает текущего пользователя тем, кто запускает сервис, и чей домашний каталог используется.
Сначала создайте новый файл ~/.config/systemd/user/timidity.service
и отредактируйте его, чтобы он содержал содержимое от kyodake:
[Unit]
Description=TiMidity++ Daemon
After=sound.target
[Service]
ExecStart=/usr/bin/timidity -iA -Os
[Install]
WantedBy=default.target
Теперь вы можете просто запустить сервер вот так:
systemctl --user start timidity
и убедиться, что он запускается при входе пользователя вот так:
systemctl --user enable timidity
без необходимости использования sudo.
Чтобы минимально исправить вашу основную проблему (и если вы хотите, чтобы timidity запускался при загрузке и был доступен для всех пользователей); проверьте, есть ли у вас файл /etc/systemd/system/timidity.service
. Если да, проверьте, есть ли строка, начинающаяся с User=
; это скажет вам, какой пользователь пытается запустить сервис. Допустим, там написано User=timidityuser
.
Теперь вы хотите выяснить, есть ли у timidityuser
домашний каталог, поэтому:
grep ^timidityuser: /etc/passwd
Предпоследнее возвращаемое поле будет домашним каталогом. Вы можете проверить, существует ли этот каталог и имеет ли он правильного владельца и права, или вы можете создать новый вот так:
sudo usermod -md /home/timidityuser timidityuser
Надеюсь, это поможет!
Попробуйте это:
Сначала вы должны добавить себя в группу аудио.
sudo gpasswd -a audio
Во-вторых, установите Freepats, проект Freepats предоставляет набор образцов инструментов.
sudo apt update
sudo apt install freepats
В-третьих, чтобы использовать Freepats с TiMidity:
sudo nano /etc/timidity++/timidity.cfg
Добавьте следующие строки в timidity.cfg:
soundfont /usr/share/soundfonts/freepats-general-midi.sf2
Если вы используете PulseAudio, это может не сработать.
Чтобы запустить TiMidity в режиме демона один раз, вы можете использовать следующую команду:
timidity -iA
Для этого создайте файл timidity.service в ~/.config/systemd/user/ вот так:
sudo nano /etc/systemd/user/timidity.service
Добавьте следующие строки в timidity.service
[Unit]
Description=TiMidity++ Daemon
After=sound.target
[Service]
ExecStart=/usr/bin/timidity -iA -Os
[Install]
WantedBy=default.target
Затем активируйте сервис с помощью:
sudo systemctl --user enable timidity.service
Источник: 1
Ответ или решение
Чтобы использовать TiMidity на Ubuntu 18.04, выполните следующие шаги:
Установка TiMidity
-
Откройте терминал и выполните команду для установки TiMidity из репозитория:
sudo apt update sudo apt install timidity
-
Убедитесь, что вы добавлены в аудиогруппу, чтобы избежать проблем с правами доступа:
sudo gpasswd -a <ваше_имя_пользователя> audio
Установка Freepats
Для воспроизведения MIDI файлов с помощью TiMidity, рекомендуется установить Freepats, который предоставляет набор звуковых инструментов:
sudo apt install freepats
Настройка конфигурации TiMidity
-
Откройте конфигурационный файл TiMidity для редактирования:
sudo nano /etc/timidity/timidity.cfg
-
Добавьте следующую строку в файл конфигурации, указывающую на использование звукового шрифта Freepats:
soundfont /usr/share/soundfonts/freepats-general-midi.sf2
Запуск TiMidity
Временный запуск в режиме демона
Для однократного запуска TiMidity используйте команду:
timidity -iA
Настройка systemd для автоматического запуска
Чтобы TiMidity автоматически запускался при входе в систему, создайте файл службы systemd для вашего пользователя.
-
Создайте и отредактируйте файл
~/.config/systemd/user/timidity.service
:nano ~/.config/systemd/user/timidity.service
-
Добавьте в файл следующий контент:
[Unit] Description=TiMidity++ Daemon After=sound.target [Service] ExecStart=/usr/bin/timidity -iA -Os [Install] WantedBy=default.target
-
Активируйте службу так, чтобы она запускалась при входе в систему:
systemctl --user enable timidity
-
Запустите службу:
systemctl --user start timidity
Устранение проблем с правами доступа
Если у вас возникают ошибки, связанные с Pulseaudio и правами доступа, такие как "Home directory not accessible: Permission denied", возможно, проблема заключается в том, что служба попыталась запуститься от имени пользователя, не имеющего прав доступа к своему домашнему каталогу.
-
Проверьте, какое имя пользователя используется для запуска службы:
cat /etc/systemd/system/timidity.service | grep User=
-
Убедитесь, что у этого пользователя есть домашний каталог. Если его нет, создайте его, используя команду (замените
<имя_пользователя>
на соответствующее имя):sudo usermod -md /home/<имя_пользователя> <имя_пользователя>
Теперь TiMidity должно корректно работать на Ubuntu 18.04, и вы сможете воспроизводить MIDI-файлы с использованием SoundFont от Freepats. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!