Bir işlemin belirli bir aygıtı kullanabilmesi için izinleri ayarlamanın bir yolu var mı?


12

Okuyacağınız gibi, örneğin burada , systemd'nin bir parçası olan logind, kullanıcı oturumları için bazı cihazlara izinler ayarlayabilir. Ayrıca, bu tür davranışların pratikte nasıl çalıştığını gösteren bir video var . Kısacası, başlatırsanız, diyelim amarok ve bir şarkı çalıyorsanız, başka bir kullanıcıya veya yalnızca giriş isteminin bulunduğu TTY'ye geçene kadar sesi duyacaksınız. Çünkü aktif oturum aktif değil.

Ben sadece belirli bir gruba, bu durumda "ses" bir kullanıcı (veya kullanıcılar) ekleyebilirsiniz biliyorum, ve bu 'bu sorunu çözecektir', ama başka bir çözüm olup olmadığını merak ediyorum. Gerçekten istediğim, tüm kullanıcıların oturumları kilitli olsa bile, ses kartını her zaman kullanabilmesi için işlem için bazı izinler ayarlamaktır.

Mümkün mü? Soruyorum çünkü sık sık müzik dinliyorum ve çoğu zaman monitörüne ihtiyaç duymuyorum, bu yüzden sadece ekranı kilitliyorum. Ancak ekranı kilitlediğimde, aktif oturum devre dışı kalır ve amarok oynatmayı durdurur. Ve evet, ekran kilitlenmeli ve sadece kapatılmamalıdır.

DÜZENLE:

Hangi dağıtımı kullandığımın önemli olduğunu düşünmüyorum, çünkü eğer gemide systemd varsa, aynı sorun olurdu. Her neyse, debian sid kullanıyorum, ancak systemd, udev (ve bazı bağımlılıklar) gibi bazı paketler deneysel daldan ve şimdi 219-9 sürümü.


1
Muhtemelen koşmak nohup program_x & ; disownyardımcı olabilir. Veya ekranı
JustMe

Ancak süreç gayet iyi çalışıyor. Ekranı kilitlediğimde, en azından ekranın kilidini açana kadar ses kartını kullanamıyor.
Mikhail Morfikov

loginctl enable-lingerHesap için kullanmayı denediniz mi?
Spuk

Arch wiki'ye göre: 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.Bu, etkin olmayan bir kullanıcı oturumuyla ilgili değildir systemd --user, çünkü her zaman mevcuttur.
Mikhail Morfikov

Kilitledikten sonra uyurken müziğimi Fedora 21 dizüstü bilgisayarımda çalıyor. Bu yüzden bilgisayar ekranını kilitlemenin sadece sistem nedeniyle bir oturumu etkin olarak işaretlememesi gerektiğini düşünüyorum.
Bratchley

Yanıtlar:


1

Hangi sürümü / lezzeti kullandığınızdan emin değilim, ancak ses cihazları için ACL'lerin udev kuralları aracılığıyla ConsoleKit tarafından kontrol edildiği anlaşılıyor. Debian sunucumda, /lib/udev/rules.d/70-udev-acl.rules içinde aşağıdaki gibi bir şey görüyorum

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

Bunu etiketini kaldırmakla oynayacağım, bu yüzden consolekit veritabanına ses cihazları eklemeyecek ve ses cihazlarındaki ACL'yi yönetmeyecek


Masaüstümde satırın üstündeki ve yeniden başlatmanın ardından yorum yaparak doğruladım. Ses cihazları için artık ACL yönetimi yok ve
ekranım

Soruyu güncelledim. Şimdi, consolekit eski şeyler - burada daha fazla bilgi edinebilirsiniz freedesktop.org/wiki/Software/ConsoleKit ve sistemim kullanmıyor. Logind bunun yerine geçer ve temel olarak aynı şeyi yapar. Bana verdiğin çizgiyi yorumlamaya çalıştım ve yeniden başlattıktan sonra sistemim ses kartı görmüyor. Olsa ve bu iyi çalıştı bile, bu çözümü kullanacağımı sanmıyorum - çünkü ses grubuna bir kullanıcı eklemekle aynı şey olurdu, en azından ben bu şekilde görüyorum.
Mikhail Morfikov

Teşekkürler, logind ayrıntılarına baktım ve evet, benzer şeyler yapıyor. Bu, yönetilecek cihazları tanımlamak için udev TAG 'uaccess'i arıyor ve /lib/udev/rules.d/70-uaccess.rules içinde. Her şey temel unix izinlerine geliyor, bence bu seçeneklere sahipsiniz 1) udev aracılığıyla ses kartı etiketini kaldırın, bu yüzden logind ses cihazını ve kilitleme ekranını yönetmez, kullanıcıları değiştirir - ses cihazlarının izinlerini değiştirmez. izinleri istediğiniz gibi ayarlayabilirsiniz 2) sadece amarok ikili bulabilir ve grubunu ses ve setgid olarak ayarlayabilirsiniz, böylece etkili grup ses haline gelir
VenkatC

İkinci çözümü kontrol ettim, ama ne yazık ki işe yaramıyor. audio groupAmarok ikilisine ayarladım ve izinler şöyle: -rwxr-sr-xama 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"
amarok'u

hmm, GUI'de setuid programlarının çalıştırılması, ex: gtk.org/setuid.html için güvenlik nedeniyle çok karmaşık ve engellenmiş gibi görünüyor . Daha fazla araştırma yapacağım ve size bildireceğim, bu iyi şeyler - yeni şeyler öğrenmek!
VenkatC

0

Linux masaüstünde ses hakkında çok az şey bildiğimi söyleyeyim. Mea Culpa bu işe yaramazsa.

Ses cihazının grup izinlerini ayarlayacağım:

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

amarok'un koştuğu gruba. Amarok'u o grupta çalışmaya zorlamak için systemd'yi kullanın. Önce amarok systemd dosyasını / etc / systemd / user / dizinine kopyalayın ve değiştirin:

[Service]
Group=audio

(bu bir değişikliktir, dosyanın tamamı değil).

Ancak günümüzün Linux ses sistemi olan çoklu katmanlar nedeniyle daha "karmaşık" bir cevap olabilir.


1
Gelince chgrp audio- / dev / snd / altındaki tüm cihazlar zaten audiogruba sahip, ancak pulseaudio kullandığınızda bu önemli olmamalı ve durum böyle. Systemd'in hizmetine gelince denedim, ancak aşağıdaki hatayı aldım: Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUPve bu grupları normal bir kullanıcı olarak değiştirebileceğimi sanmıyorum. Grup değişikliği gerektiren başka bir hizmetim var, ancak normal bir sistem arka plan programı ve gayet iyi çalışıyor. `
Mikhail Morfikov

Amarok hizmeti root tarafından başlatılmadı mı? Amarok'un diğer öğrenciler için başka grup izinlerine ihtiyacı olabilir. Çok kötü, o kadar kolay değil.
Otheus

Sadece bir müzik çalar. :)
Mikhail Morfikov

0

Oynatıcıyı vnc framebuffer'da çalıştırmaya ne dersiniz? Nane 17'de ...

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

Masaüstünü https://en.wikipedia.org/wiki/Xvfb'de açıklandığı gibi görüntülemek için VNC'yi kullanırsınız


Usage scenariosWiki bağlantısını okudum ve bunların hiçbirinin burada geçerli olduğunu düşünmüyorum. Süreç (amarok) sadece bazı izinlere ihtiyaç duyuyor ve eğer mümkünse onları nasıl ayarlayacağımı bilmiyorum.
Mikhail Morfikov

Hangi izinlere ihtiyacınız olduğunu düşünüyorsunuz? Systemd, sadece tty's değiştirdiğiniz için cihazlardaki izinleri değiştirdiğinden şüpheliyim ve eğer yaparsa bundan sonra veba gibi önlemek için elimden geleni yapacağım. Bunun da size yardımcı olacağını bilmiyorum, test etmedim, ama çalışma şansım olan tek fikir bu. Ayrıca, kullanıcıların işlemleri değil izinleri vardır.
sigara içiyor2345

Sorunun ilk bağlantısını okuyun.
Mikhail Morfikov

0

Pulseaudio, altında bulunabilen xdg autostart ile başlatılır ~/.config/autostart/. Adında bir dosya var pulseaudio.desktopve bu dosyada varsayılan execsatırı şu şekilde değiştirdim :

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

Sisteme giriş yaptığımda, pulseaudio işlemi şöyle görünür:

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

Ve şimdi her zaman müzik dinleyebiliyorum. Bence aradığım çözüm bu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.