Apakah ada cara untuk mengatur izin agar suatu proses dapat menggunakan perangkat tertentu?

12

Seperti yang Anda baca, misalnya di sini , logind, yang merupakan bagian dari systemd, dapat mengatur izin ke beberapa perangkat untuk sesi pengguna. Ada juga video yang menunjukkan bagaimana perilaku semacam ini bekerja dalam praktik. Singkatnya, jika Anda mulai, katakanlah, amarok, dan Anda memainkan beberapa lagu, Anda akan mendengar suara sampai Anda beralih ke pengguna lain atau TTY di mana Anda hanya memiliki prompt login. Itu karena sesi aktif menjadi tidak aktif.

Saya tahu bahwa Anda cukup menambahkan pengguna (atau pengguna) ke grup tertentu, dalam hal ini "audio", dan itu akan 'memperbaiki' masalah ini, tetapi saya ingin tahu apakah ada solusi lain. Yang benar-benar saya inginkan adalah mengatur beberapa izin untuk proses sehingga dapat menggunakan kartu suara setiap saat, bahkan ketika semua pengguna memiliki sesi mereka terkunci.

Apakah itu mungkin? Saya bertanya karena saya sering mendengarkan musik dan saya tidak terlalu membutuhkan monitor saya, jadi saya hanya mengunci layar. Tetapi ketika saya mengunci layar, sesi aktif menjadi tidak aktif dan amarok berhenti diputar. Dan ya, layar harus dikunci, dan tidak dimatikan saja.

EDIT:

Saya tidak berpikir bahwa itu masalah distro mana yang saya gunakan karena jika ada systemd on board, itu akan menjadi masalah yang sama persis. Bagaimanapun, saya menggunakan debian sid, tetapi beberapa paket seperti systemd, udev (dan beberapa dependensi) berasal dari cabang eksperimental, dan sekarang versi 219-9.

Mikhail Morfikov
sumber
1
Mungkin berlari nohup program_x & ; disownbisa membantu. Atau menggunakan layar
JustMe
Tetapi prosesnya bekerja dengan baik. Ketika saya mengunci layar, itu tidak dapat menggunakan kartu suara lagi, setidaknya sampai saya membuka kunci layar.
Mikhail Morfikov
Sudahkah Anda mencoba menggunakan loginctl enable-lingeruntuk akun?
spuk
Menurut wiki lengkung: 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.Itu tidak menyangkut sesi pengguna yang tidak aktif karena systemd --userselalu ada.
Mikhail Morfikov
Saya secara rutin membiarkan musik saya diputar di laptop Fedora 21 saya sementara saya tidur setelah menguncinya. Jadi saya tidak berpikir mengunci layar komputer Anda harus menandai sesi sebagai tidak aktif hanya karena systemd.
Bratchley

Jawaban:

1

Saya tidak yakin, versi / rasa Linux yang Anda gunakan, tetapi sepertinya ACL untuk perangkat suara dikendalikan oleh ConsoleKit melalui aturan udev. Pada host Debian saya, saya melihat sesuatu seperti di bawah ini di /lib/udev/rules.d/70-udev-acl.rules

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

Saya akan bermain dengan membatalkan tag ini, jadi consolekit tidak akan menambahkan perangkat suara ke dalam basis datanya dan tidak mengelola ACL pada perangkat suara

VenkatC
sumber
Saya memverifikasi di desktop saya dengan mengomentari baris di atas dan setelah reboot. Tidak ada lagi manajemen ACL untuk perangkat suara dan saya dapat memutar lagu dengan layar saya terkunci
VenkatC
Saya memperbarui pertanyaan. Sekarang, consolekit adalah barang usang - Anda dapat membaca lebih lanjut di sini freedesktop.org/wiki/Software/ConsoleKit , dan sistem saya tidak menggunakannya. Logind adalah pengganti untuk itu, dan pada dasarnya melakukan hal yang sama. Saya mencoba mengomentari baris yang Anda berikan kepada saya, dan setelah reboot, sistem saya tidak melihat kartu suara. Bahkan jika itu berhasil dan ini bekerja dengan baik, saya tidak berpikir bahwa saya akan menggunakan solusi ini - itu karena itu akan sama dengan menambahkan pengguna ke grup audio, setidaknya saya melihatnya dengan cara ini.
Mikhail Morfikov
Terima kasih, saya melihat detail logind dan ya, ia melakukan hal serupa. Itu mencari udev TAG 'uaccess' untuk mengidentifikasi perangkat yang akan dikelola dan ada di /lib/udev/rules.d/70-uaccess.rules. Semuanya turun ke izin unix dasar, menurut saya Anda memiliki opsi ini 1) menghapus tag kartu suara melalui udev, jadi logind tidak mengelola perangkat audio dan mengunci layar, mengalihkan pengguna - tidak akan mengubah izin perangkat suara. Anda dapat mengatur perms sesuka Anda 2) Anda cukup menemukan amarok binary dan mengatur grup itu menjadi audio dan mengaturnya, sehingga grup yang efektif menjadi audio
VenkatC
Saya memeriksa solusi kedua, tetapi sayangnya itu tidak berhasil. Saya menetapkan audio groupke biner amarok, dan izinnya adalah sebagai berikut -rwxr-sr-x:, tetapi ketika saya mencoba untuk memulai amarok sebagai pengguna biasa, saya mendapatkan kesalahan ini: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"
Mikhail Morfikov
hmm, sepertinya menjalankan program setuid di GUI tampaknya rumit dan diblokir karena alasan keamanan misalnya: gtk.org/setuid.html . Saya akan meneliti lebih lanjut dan memberi tahu Anda, ini hal yang bagus - mempelajari hal-hal baru!
VenkatC
0

Biar saya katakan saya tahu sedikit tentang audio di desktop Linux. Mea Culpa jika ini tidak akan membantu.

Saya akan mengatur izin grup perangkat audio:

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

ke grup yang menjalankan amarok. Gunakan systemd untuk memaksa amarok berjalan di grup itu. Pertama-tama salin file amarok systemd ke / etc / systemd / user / dan modifikasi:

[Service]
Group=audio

(itu modifikasi, bukan seluruh file).

Tetapi mungkin ada jawaban yang lebih "canggih" karena banyak lapisan yang merupakan sistem audio-Linux saat ini.

Otheus
sumber
1
Adapun chgrp audio- semua perangkat di bawah / dev / snd / sudah memiliki audiogrup, tetapi ini seharusnya tidak masalah ketika Anda menggunakan pulseaudio, dan itulah masalahnya. Ketika datang ke layanan systemd, saya mencobanya, tetapi saya mendapat kesalahan berikut:, Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUPdan saya tidak berpikir bahwa saya dapat mengubah grup ini sebagai pengguna biasa. Saya memiliki layanan lain yang memerlukan perubahan grup, tetapi ini adalah daemon sistem normal, dan berfungsi dengan baik. `
Mikhail Morfikov
Layanan Amarok tidak dimulai oleh root? Mungkin Amarok membutuhkan izin grup lain untuk puproses lainnya. Sayang sekali itu tidak mudah.
Otheus
Itu hanya pemutar musik. :)
Mikhail Morfikov
0

Bagaimana menjalankan pemain di vnc framebuffer? Dalam Mint 17 ...

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

Anda akan menggunakan VNC untuk melihat desktop seperti yang dijelaskan dalam https://en.wikipedia.org/wiki/Xvfb

merokok2345
sumber
Saya sudah membaca Usage scenariosdi tautan wiki, dan saya rasa tidak ada yang berlaku di sini. Prosesnya (amarok) hanya perlu beberapa izin, dan saya tidak tahu cara mengaturnya, jika itu mungkin.
Mikhail Morfikov
Izin apa yang menurut Anda dibutuhkan? Saya sangat ragu systemd mengubah izin pada perangkat hanya karena Anda beralih tty dan jika itu saya akan melakukan yang terbaik untuk menghindarinya seperti wabah mulai sekarang. Saya tidak tahu bahwa ini akan membantu Anda juga, saya tidak mengujinya, tetapi satu-satunya ide saya yang memiliki kesempatan untuk bekerja. Selain itu, pengguna memiliki izin, bukan proses.
smokes2345
Baca saja tautan pertama dalam pertanyaan.
Mikhail Morfikov
0

Pulseaudio dimulai melalui xdg autostart, yang dapat ditemukan di bawah ~/.config/autostart/. Ada file bernama pulseaudio.desktop, dan dalam file itu saya telah mengubah execbaris default ke yang ini:

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

Ketika saya masuk ke sistem, proses pulseaudio terlihat seperti ini:

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

Dan sekarang saya dapat mendengarkan musik setiap saat. Saya pikir ini adalah solusi yang saya cari.

Mikhail Morfikov
sumber