Чи є спосіб встановити дозволи, щоб процес міг використовувати певний пристрій?


12

Як ви можете прочитати, наприклад, тут , логін, який є частиною системи, може встановлювати дозволи для деяких пристроїв для сеансів користувача. Існує також вид, який показує, як така поведінка працює на практиці. Коротше кажучи, якщо ви почнете, скажімо, amarok, і ви зіграєте якусь пісню, ви почуєте звук, поки не перейдете на іншого користувача або TTY, де у вас є лише запит на вхід. Це тому, що активна сесія стала неактивною.

Я знаю, що ви можете просто додати користувача (або користувачів) до певної групи, в цьому випадку "аудіо", і це "виправить" це питання, але мені цікаво, чи є інше рішення. Я дійсно хочу, щоб встановити деякі дозволи для процесу, щоб він міг використовувати звукову карту весь час, навіть коли всі користувачі мають сеанси заблоковані.

Це можливо? Я запитую, тому що я часто слухаю музику, і мені дуже не потрібно, щоб монітор був більшу частину часу, тому я просто блокую екран. Але коли я блокую екран, активний сеанс стає неактивним, і amarok перестає грати. І так, екран слід заблокувати, а не просто вимикати.

Редагувати:

Я не думаю, що має значення, який дистрибутив я використовую, тому що якщо на борту є система, то це була б точно така ж проблема. У будь-якому разі я використовую debian sid, але деякі пакети, такі як systemd, udev (і деякі залежності), є з експериментальної галузі, і тепер це версія 219-9.


1
Можливо, біг nohup program_x & ; disownможе допомогти. Або за допомогою екрана
JustMe

Але процес працює просто чудово. Коли я блокую екран, він більше не може використовувати звукову карту, принаймні, доки я не розблокую екран.
Михайло Морфіков

Ви намагалися використовувати loginctl enable-lingerдля облікового запису?
spuk

За словами арки wiki: The systemd user instance is started after the first login of a user and killed after the last session of the user is closed. Sometimes it may be useful to start it right after boot, and keep the systemd user instance running after the last session closes, for instance to have some user process running without any open session. Lingering is used to that effect.Це не стосується неактивного сеансу користувача, оскільки systemd --userвін присутній постійно.
Михайло Морфіков

Я звичайно залишаю свою музику, граючи на своєму ноутбуку Fedora 21, коли я сплю після заблокування. Тому я не думаю, що блокування екрана комп'ютера повинно означати сеанс як неактивний лише через systemd.
Братчлі

Відповіді:


1

Я не впевнений, яку версію / аромат Linux ви використовуєте, але схоже, що ACL для звукових пристроїв контролюється ConsoleKit за допомогою правил udev. На своєму хості Debian я бачу щось подібне нижче в /lib/udev/rules.d/70-udev-acl.rules

# sound devices
SUBSYSTEM=="sound", TAG+="udev-acl"

Я б грав з відміткою цього, тому consolekit не додаватиме звукові пристрої до своєї бази даних та не керуватиме ACL на звукових пристроях


Я перевірив на своєму робочому столі коментування вище рядка та після перезавантаження. Більше немає керування ACL для звукових пристроїв, і я можу грати пісні із заблокованим екраном
VenkatC

Я оновив питання. Тепер consolekit - це застарілі речі - ви можете прочитати більше про це тут freedesktop.org/wiki/Software/ConsoleKit , і моя система не використовує його. Logind - це його заміна, і він робить в основному те саме. Я спробував прокоментувати рядок, який ви мені дали, і після перезавантаження система не бачить звукових карт. Навіть якби це було, і це спрацювало чудово, я не думаю, що я би використовував це рішення - це тому, що це було б те саме, що і додавання користувача до аудіогрупи, принаймні я бачу це таким чином.
Михайло Морфіков

Дякую, я переглянув деталі реєстрації, і так, це робить подібні речі. Тобто шукає udev TAG 'uaccess' для ідентифікації пристроїв, якими керує, і це в /lib/udev/rules.d/70-uaccess.rules. Це все зводиться до основних дозволів unix, на мою думку, у вас є такі варіанти 1) видаліть тег звукової картки через udev, тому вхід не керує аудіопристроєм та блокуючим екраном, комутація користувачів - не змінить дозволи звукових пристроїв. ви можете встановити perms так, як вам подобається. 2) ви можете просто знайти бінарний Amarok і встановити його групу для аудіо та setgid, тому ефективною групою стає аудіо
VenkatC

Я перевірив друге рішення, але, на жаль, воно не працює. Я налаштований audio groupна бінарний файл amarok, і дозволи такі: -rwxr-sr-xале коли я намагаюся запустити amarok як постійний користувач, я отримую цю помилку:QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave. unnamed app(24333): KUniqueApplication: Cannot find the D-Bus session server: "Unable to autolaunch when setuid"
Михайло Морфіков

Хм, схоже, запуск встановлених програм у графічному інтерфейсі здається складним та заблокованим з міркувань безпеки для: exk : gtk.org/setuid.html . Я буду більше досліджувати і повідомляти вам, це хороші речі - вивчення нових речей!
VenkatC

0

Дозвольте сказати, що я мало знаю про аудіо на робочому столі Linux. Меа Кульпа, якщо це не допоможе.

Я встановив би групові дозволи аудіопристрою:

chgrp audio <dev-path>
chmod g+rw <dev-path>

до групи, в якій працює amarok. Використовуйте systemd, щоб змусити amarok працювати в цій групі. Спочатку скопіюйте файл amarok systemd в / etc / systemd / user / та змініть його:

[Service]
Group=audio

(це модифікація, не весь файл).

Але може бути більш "витончена" відповідь через кілька шарів, які є сьогоднішньою Linux-аудіосистемою.


1
Що стосується chgrp audio- усі пристрої під / dev / snd / вже мають audioгрупу, але це не має значення, коли ви використовуєте pulseaudio, і це так. Що стосується сервісу systemd, я спробував це, але я отримав таку помилку: Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUPі я не думаю, що я можу змінити ці групи як звичайний користувач. У мене є інший сервіс, який вимагає зміни групи, але це нормальний системний демон, і він працює чудово. `
Михайло Морфіков

Послуга Amarok не запускається root? Можливо, Amarok потребує інших дозволів для інших груп. Шкода, що це не так просто.
Отей

Це просто музичний плеєр. :)
Михайло Морфіков

0

Як щодо запуску програвача в vnc framebuffer? У монетному дворі 17 ...

# apt search vfb
p   xvfb                            - Virtual Framebuffer 'fake' X server
p   xvfb:i386                       - Virtual Framebuffer 'fake' X server

Ви б використовували VNC для перегляду робочого столу, як описано в https://en.wikipedia.org/wiki/Xvfb


Я прочитав посилання Usage scenariosна вікі, і не думаю, що тут застосовується жодне з них. Процес (amarok) просто потребує деяких дозволів, і я не маю уявлення, як їх встановити, якщо це навіть можливо.
Михайло Морфіков

Які дозволи ви вважаєте потрібними? Я дуже сумніваюся, що systemd змінює дозволи на пристроях лише тому, що ви перемикаєте tty, і якщо я все-таки буду робити все можливе, щоб відтепер це не було, як чума. Я не знаю, що це вам теж допоможе, я не перевіряв це, але це єдина ідея, у якої є шанс працювати. Також користувачі мають дозволи, а не процеси.
курить2345

Просто прочитайте перше посилання у питанні.
Михайло Морфіков

0

Pulseaudio запускається за допомогою автоматичного запуску xdg, який можна знайти у розділі ~/.config/autostart/. Існує файл, який називається pulseaudio.desktop, і в цьому файлі я змінив execрядок за замовчуванням на цей:

Exec=/usr/bin/sg audio -c "pulseaudio -D"

Коли я входжу в систему, імпульсний процес виглядає так:

$ ps -eo user,group,args | grep pulse
morfik   audio    pulseaudio -D
morfik   audio    /usr/lib/pulseaudio/pulse/gconf-helper

І тепер я можу весь час слухати музику. Я думаю, це рішення, яке я шукав.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.