มีวิธีตั้งค่าสิทธิ์เพื่อให้กระบวนการสามารถใช้อุปกรณ์เฉพาะได้หรือไม่


12

อย่างที่คุณสามารถอ่านได้ที่นี่ logind ซึ่งเป็นส่วนหนึ่งของ systemd สามารถตั้งค่าการอนุญาตให้อุปกรณ์บางอย่างสำหรับเซสชันผู้ใช้ นอกจากนี้ยังมีวิดีโอแสดงให้เห็นว่าพฤติกรรมเช่นนี้ทำงานอย่างไรในทางปฏิบัติ กล่าวโดยย่อถ้าคุณเริ่มต้นสมมติว่า amarok และคุณเล่นเพลงบางเพลงคุณจะได้ยินเสียงจนกว่าคุณจะเปลี่ยนไปใช้ผู้ใช้อื่นหรือ TTY ที่คุณมีเพียงพรอมต์การเข้าสู่ระบบ นั่นเป็นเพราะเซสชั่นที่ใช้งานกลายเป็นไม่ได้ใช้งาน

ฉันรู้ว่าคุณสามารถเพิ่มผู้ใช้ (หรือผู้ใช้) ในกลุ่มเฉพาะในกรณีนี้ "เสียง" และนั่นจะ 'แก้ไข' ปัญหานี้ แต่ฉันสงสัยว่ามีวิธีแก้ไขปัญหาอื่นหรือไม่ สิ่งที่ฉันต้องการคือการตั้งค่าสิทธิ์บางอย่างสำหรับกระบวนการเพื่อให้สามารถใช้การ์ดเสียงได้ตลอดเวลาแม้ว่าผู้ใช้ทุกคนจะถูกล็อคเซสชันก็ตาม

เป็นไปได้ไหม ฉันถามเพราะฉันมักจะฟังเพลงและฉันไม่ต้องการจอมอนิเตอร์ของฉันเป็นส่วนใหญ่ดังนั้นฉันแค่ล็อคหน้าจอ แต่เมื่อฉันล็อคหน้าจอเซสชันที่ใช้งานจะไม่ทำงานและ amarok หยุดเล่น และใช่หน้าจอควรถูกล็อคและไม่เพียงปิด

แก้ไข:

ฉันไม่คิดว่ามันเป็นเรื่องสำคัญที่ฉันใช้ distro เพราะถ้ามี systemd อยู่บนกระดานมันจะเป็นปัญหาเดียวกันแน่นอน อย่างไรก็ตามฉันใช้ debian sid แต่แพ็คเกจบางอย่างเช่น systemd, udev (และบางส่วนพึ่งพา) มาจากสาขาทดลองและตอนนี้เป็นรุ่น 219-9


1
อาจเป็นไปnohup program_x & ; disownได้ที่จะช่วยได้ หรือใช้หน้าจอ
JustMe

แต่กระบวนการทำงานได้ดี เมื่อฉันล็อคหน้าจอมันไม่สามารถใช้การ์ดเสียงได้อีกอย่างน้อยก็จนกว่าฉันจะปลดล็อคหน้าจอ
Mikhail Morfikov

คุณได้ลองใช้loginctl enable-lingerสำหรับบัญชี?
spuk

ตามวิกิ arch: 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มีอยู่ตลอดเวลา
Mikhail Morfikov

ฉันปล่อยให้เพลงของฉันเล่นบนแล็ปท็อป Fedora 21 ของฉันเป็นประจำในขณะที่ฉันหลับหลังจากล็อคไว้ ดังนั้นฉันไม่คิดว่าการล็อกหน้าจอคอมพิวเตอร์ของคุณควรทำเครื่องหมายเซสชันว่าไม่ทำงานเนื่องจาก systemd
Bratchley

คำตอบ:


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 เป็นสิ่งทดแทนสิ่งนี้และมันก็เป็นสิ่งเดียวกัน ฉันพยายามแสดงความคิดเห็นในบรรทัดที่คุณให้กับฉันและหลังจากรีบูตระบบของฉันไม่เห็นการ์ดเสียงใด ๆ แม้ว่าจะทำได้และใช้งานได้ดีฉันไม่คิดว่าฉันจะใช้วิธีแก้ปัญหานี้ - เพราะมันจะเป็นเช่นเดียวกับการเพิ่มผู้ใช้ในกลุ่มเสียงอย่างน้อยที่สุดฉันก็เห็นด้วยวิธีนี้
Mikhail Morfikov

ขอบคุณฉันดูรายละเอียด logind และใช่มันทำสิ่งที่คล้ายกัน ที่กำลังมองหา udev TAG 'uaccess' เพื่อระบุอุปกรณ์ที่จะจัดการและอยู่ใน /lib/udev/rules.d/70-uaccess.rules มันคือทั้งหมดที่ลงมาสู่การอนุญาต unix ขั้นพื้นฐานในความคิดของฉันคุณมีตัวเลือกเหล่านี้ 1) ลบแท็กการ์ดเสียงผ่าน udev ดังนั้น logind ไม่จัดการอุปกรณ์เสียงและหน้าจอล็อคการสลับผู้ใช้ - จะไม่เปลี่ยนสิทธิ์ของอุปกรณ์เสียง คุณสามารถตั้งค่า perms ตามที่คุณต้องการ 2) คุณสามารถหา amarok binary และตั้งค่าให้กลุ่มเป็น audio และ setgid ดังนั้นกลุ่มที่มีประสิทธิภาพจะกลายเป็น audio
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"
Mikhail Morfikov

อืมดูเหมือนว่าใช้โปรแกรม setuid ใน GUI ดูเหมือนซับซ้อนและวิธีการบล็อกสำหรับเหตุผลด้านความปลอดภัยสำหรับอดีต: gtk.org/setuid.html ฉันจะค้นคว้าเพิ่มเติมและแจ้งให้คุณทราบว่านี่คือสิ่งที่ดี - เรียนรู้สิ่งใหม่!
VenkatC

0

ให้ฉันบอกว่าฉันรู้เพียงเล็กน้อยเกี่ยวกับเสียงบนเดสก์ท็อป Linux Mea Culpa ถ้าสิ่งนี้ไม่ช่วย

ฉันจะตั้งค่าการอนุญาตกลุ่มสำหรับอุปกรณ์เสียง:

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และฉันไม่คิดว่าฉันสามารถเปลี่ยนกลุ่มเหล่านี้เป็นผู้ใช้ทั่วไปได้ ฉันมีบริการอื่น ๆ ที่ต้องเปลี่ยนกลุ่ม แต่มันเป็นระบบภูตปกติและทำงานได้ดี `
มิคาอิล Morfikov

บริการของ Amarok ไม่ได้เริ่มจากราก เป็นไปได้ที่ Amarok ต้องการการอนุญาตจากกลุ่มสำหรับนักเรียนคนอื่น ๆ น่าเสียดายที่มันไม่ง่ายเลย
Otheus

มันเป็นเพียงเครื่องเล่นเพลง :)
มิคาอิล Morfikov

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) เพียงต้องการสิทธิ์บางอย่างและฉันไม่รู้ว่าจะตั้งค่าอย่างไรถ้าเป็นไปได้
Mikhail Morfikov

คุณคิดว่าต้องการสิทธิ์อะไร ฉันสงสัยอย่างสูงว่า systemd กำลังเปลี่ยนการอนุญาตบนอุปกรณ์เพียงเพราะคุณเปลี่ยน tty และถ้ามันจะทำให้ดีที่สุดเพื่อหลีกเลี่ยงมันเหมือนกับโรคระบาดนับจากนี้เป็นต้นไป ฉันไม่ทราบว่าสิ่งนี้จะช่วยคุณได้ฉันไม่ได้ทดสอบ แต่เป็นความคิดเดียวที่ฉันมีซึ่งมีโอกาสได้ทำงาน นอกจากนี้ผู้ใช้มีสิทธิ์ไม่ใช่กระบวนการ
smokes2345

แค่อ่านลิงค์แรกในคำถาม
Mikhail Morfikov

0

Pulseaudio เริ่มทำงานผ่าน xdg autostart ซึ่งสามารถพบ~/.config/autostart/ได้ใน มีไฟล์ชื่อpulseaudio.desktopและในไฟล์นั้นฉันได้เปลี่ยนexecบรรทัดเริ่มต้นเป็นไฟล์นี้:

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

เมื่อฉันเข้าสู่ระบบกระบวนการ pulseaudio มีลักษณะเช่นนี้:

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

และตอนนี้ฉันสามารถฟังเพลงได้ตลอดเวลา ฉันคิดว่านี่เป็นวิธีแก้ปัญหาที่ฉันกำลังมองหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.