Один хороший человек на IRC канале #archlinux32
помог сообщить, что решением может быть опция для snd-hda-intel
модуля ядра:model=6stack
или model=6stack-digout
.
Итак, после перезагрузки этого модуля с опцией все заработало:
modprobe -r snd-hda-intel
modprobe snd-hda-intel model=6stack
Это может быть ошибка в ядре, поэтому оно загружает этот модуль без соответствующей опции, а также патч не работает для этой материнской платы.
Хотя добавление этой опции вручную в /etc/modprobe.d/
сообщит системе, что этот модуль следует загружать с этой опцией при каждой следующей загрузке:
echo "options snd-hda-intel model=6stack" >> /etc/modprobe.d/sound_fix.conf
Вы можете записать юнит-файл, скажем, в/etc/systemd/system/myprocess.service
:
[Unit]
Description=My Process
[Service]
ExecStart=/bin/myprocess
Restart=always
[Install]
WantedBy=multi-user.target
А затем в записи на рабочем столе создайте лаунчер
systemctl start myprocess.service
Но не забудьте не включать эту службу при запуске, поэтому вы можете запустить ее вручную из своей исполняемой записи.
РЕДАКТИРОВАТЬ:
Если вам также нужно запустить в режиме отладки, создайте еще один сервисный модуль с параметром --debug
. Вы можете создать еще одну запись на рабочем столе, чтобы указать сценарий, который выглядит как (просто репрезентативная идея)
systemctl stop myprocess.service // to stop previous service
systemctl start processwithdebug.servce // to debug
Вы можете заставить systemd сделать за вас часть работы со вторым модулем B, сказав, что он Conflicts
с первым модулем A; затем, когда вы запускаете B, он останавливает A. К сожалению, когда B останавливается, A не перезапускается по умолчанию, но вы можете добавить строку OnFailure
; если B завершается с ошибкой, A будет запущен. Чтобы гарантировать сбой в случае нормального выхода из B, вы можете использовать ExecStop
, который устанавливает код возврата на ненулевой -.
А.сервис:
[Service]
Type=simple
ExecStart=/opt/foo/myapplication
Б.сервис:
[Unit]
Conflicts=A.service
OnFailure=A.service
[Service]
Type=simple
ExecStart=/opt/foo/myapplication --debug
ExecStop=/usr/bin/false
Вы можете использовать файл блокировки, чтобы убедиться, что работает только один экземпляр вашего приложения. Вместо systemctl stop myservice
в лаунчере запустите systemctl restart myservice
, и через 5 секунд, необходимых для перезапуска приложения, запустите отладочную версию после получения файла блокировки:
systemctl restart myservice
flock /opt/foo/mylock /opt/foo/myapplication --debug
и измените файл модуля, чтобы использовать ту же блокировку:
ExecStart=/usr/bin/flock /opt/foo/mylock /opt/foo/myapplication
Он перезапустится через 5 секунд, затем дождется получения блокировки и удержит ее во время работы приложения. Файл блокировки может быть где угодно. На самом деле вы можете использовать /opt/foo/myapplication
в качестве файла блокировки, но если вы перекомпилируете его или что-то в этом роде, вы потеряете блокировку при ее изменении.