Có cách nào để đặt quyền để một quy trình có thể sử dụng một thiết bị cụ thể không?


12

Như bạn có thể đọc, ví dụ ở đây , logind, một phần của systemd, có thể đặt quyền cho một số thiết bị cho phiên người dùng. Ngoài ra còn có một vid cho thấy loại hành vi này hoạt động như thế nào trong thực tế. Nói tóm lại, nếu bạn bắt đầu, giả sử, amarok và bạn chơi một số bài hát, bạn sẽ nghe thấy âm thanh cho đến khi bạn chuyển sang người dùng khác hoặc TTY nơi bạn chỉ có dấu nhắc đăng nhập. Đó là vì phiên hoạt động trở nên không hoạt động.

Tôi biết rằng bạn chỉ cần thêm người dùng (hoặc người dùng) vào một nhóm cụ thể, trong trường hợp này là "âm thanh" và điều đó sẽ 'khắc phục' vấn đề này, nhưng tôi tự hỏi liệu có giải pháp nào khác không. Điều tôi thực sự muốn là thiết lập một số quyền cho quy trình để nó có thể sử dụng card âm thanh mọi lúc, ngay cả khi tất cả người dùng bị khóa phiên.

Điều đó có thể không? Tôi đang hỏi bởi vì tôi thường nghe nhạc và tôi thực sự không cần màn hình của mình ở hầu hết thời gian, vì vậy tôi chỉ khóa màn hình. Nhưng khi tôi khóa màn hình, phiên hoạt động sẽ không hoạt động và amarok ngừng phát. Và vâng, màn hình nên được khóa, và không chỉ tắt.

BIÊN TẬP:

Tôi không nghĩ rằng đó là vấn đề mà tôi đang sử dụng vì nếu có systemd trên tàu, thì đó sẽ là vấn đề chính xác. Dù sao, tôi đang sử dụng sidian sid, nhưng một số gói như systemd, udev (và một số phụ thuộc) là từ nhánh thử nghiệm, và bây giờ là phiên bản 219-9.


1
Có thể chạy nohup program_x & ; disowncó thể giúp đỡ. Hoặc sử dụng màn hình
JustMe

Nhưng quá trình hoạt động tốt. Khi tôi khóa màn hình, nó không thể sử dụng card âm thanh nữa, ít nhất là cho đến khi tôi mở khóa màn hình.
Mikhail Morfikov

Bạn đã thử sử dụng loginctl enable-lingercho tài khoản?
spuk

Theo wiki 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.Điều đó không liên quan đến phiên người dùng không hoạt động vì systemd --userluôn có mặt.
Mikhail Morfikov

Tôi thường xuyên để nhạc của mình phát trên máy tính xách tay Fedora 21 trong khi tôi ngủ sau khi khóa nó. Vì vậy, tôi không nghĩ rằng khóa màn hình máy tính của bạn sẽ đánh dấu một phiên là không hoạt động chỉ vì systemd.
Bratchley 17/05/2015

Câu trả lời:


1

Tôi không chắc chắn, phiên bản / hương vị Linux nào bạn đang sử dụng, nhưng có vẻ như ACL dành cho các thiết bị âm thanh được ConsoleKit kiểm soát thông qua các quy tắc udev. Trên máy chủ Debian của tôi, tôi thấy một cái gì đó như dưới đây trong /lib/udev/rules.d/70-udev-acl.rules

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

Tôi sẽ chơi với việc tháo gỡ điều này, vì vậy consolekit sẽ không thêm thiết bị âm thanh vào cơ sở dữ liệu của nó và không quản lý ACL trên thiết bị âm thanh


Tôi đã xác minh trên máy tính để bàn của mình bằng cách nhận xét dòng trên và sau khi khởi động lại. Không còn quản lý ACL cho các thiết bị âm thanh và tôi có thể phát các bài hát khi màn hình của mình bị khóa
VenkatC

Tôi cập nhật câu hỏi. Bây giờ, consolekit là thứ lỗi thời - bạn có thể đọc thêm về nó ở đây freedesktop.org/wiki/Software/ConsoleKit và hệ thống của tôi không sử dụng nó. Logind là một sự thay thế cho nó, và về cơ bản nó cũng làm điều tương tự. Tôi đã cố gắng nhận xét dòng bạn đưa cho tôi và sau khi khởi động lại, hệ thống của tôi không thấy bất kỳ thẻ âm thanh nào. Ngay cả khi nó đã làm và điều này hoạt động tốt, tôi không nghĩ rằng tôi sẽ sử dụng giải pháp này - đó là vì nó sẽ giống như việc thêm một người dùng vào nhóm âm thanh, ít nhất là tôi thấy nó theo cách này.
Mikhail Morfikov

Cảm ơn, tôi đã xem chi tiết logind và vâng, nó đang làm những thứ tương tự. Đó là tìm kiếm udev TAG 'uaccess' để xác định các thiết bị cần quản lý và nó nằm trong /lib/udev/rules.d/70-uaccess.rules. Tất cả đều thuộc về các quyền unix cơ bản, theo tôi, bạn có các tùy chọn này 1) xóa thẻ card âm thanh qua udev, vì vậy logind không quản lý thiết bị âm thanh và khóa màn hình, chuyển đổi người dùng - sẽ không thay đổi quyền của thiết bị âm thanh. bạn có thể đặt perm như bạn muốn 2) bạn chỉ cần tìm nhị phân amarok và đặt nhóm của nó thành âm thanh và đặt nó, vì vậy nhóm hiệu quả sẽ trở thành âm thanh
VenkatC

Tôi đã kiểm tra giải pháp thứ hai, nhưng tiếc là nó không hoạt động. Tôi đặt thành audio groupnhị phân amarok và các quyền như sau: -rwxr-sr-xnhưng khi tôi cố gắng khởi động amarok như một người dùng thông thường, tôi gặp lỗi này: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, có vẻ như chạy các chương trình setuid trong GUI có vẻ phức tạp và bị chặn vì lý do bảo mật cho ex: gtk.org/setuid.html . Tôi sẽ nghiên cứu thêm và cho bạn biết, đây là công cụ tốt - học những điều mới!
VenkatC

0

Hãy để tôi nói tôi biết rất ít về âm thanh trên máy tính để bàn Linux. Mea Culpa nếu điều này sẽ không giúp đỡ.

Tôi sẽ đặt quyền nhóm của thiết bị âm thanh:

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

vào nhóm mà amarok chạy vào. Sử dụng systemd để buộc amarok chạy trong nhóm đó. Đầu tiên sao chép tệp systemar amarok vào / etc / systemd / user / và sửa đổi nó:

[Service]
Group=audio

(đó là một sửa đổi, không phải toàn bộ tập tin).

Nhưng có thể có một câu trả lời "tinh vi" hơn do có nhiều lớp là hệ thống âm thanh Linux ngày nay.


1
Đối với chgrp audio- tất cả các thiết bị dưới / dev / snd / đã có audionhóm, nhưng điều này không thành vấn đề khi bạn sử dụng pulseaudio, và đó là trường hợp. Khi nói đến dịch vụ của systemd, tôi đã thử nó, nhưng tôi đã gặp phải lỗi sau: Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUPvà tôi không nghĩ rằng tôi có thể thay đổi các nhóm này như một người dùng thông thường. Tôi có dịch vụ khác yêu cầu thay đổi nhóm, nhưng đó là một trình nền hệ thống bình thường và nó hoạt động tốt. `
Mikhail Morfikov

Dịch vụ Amarok không bắt đầu bằng root? Có thể Amarok cần các quyền nhóm khác cho các học sinh khác. Thật tệ, điều đó không dễ chút nào.
Otheus

Nó chỉ là một máy nghe nhạc. :)
Mikhail Morfikov

0

Làm thế nào về việc chạy trình phát trong vnc framebuffer? Trong Mint 17 ...

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

Bạn sẽ sử dụng VNC để xem máy tính để bàn như được mô tả trong https://en.wikipedia.org/wiki/Xvfb


Tôi đã đọc Usage scenariosliên kết wiki và tôi không nghĩ ai trong số họ áp dụng ở đây. Quá trình (amarok) chỉ cần một số quyền và tôi không biết làm cách nào để đặt chúng, nếu điều đó thậm chí có thể.
Mikhail Morfikov

Những quyền nào bạn nghĩ rằng bạn cần? Tôi rất nghi ngờ systemd đang thay đổi quyền trên các thiết bị chỉ vì bạn chuyển đổi tty và nếu tôi sẽ cố hết sức để tránh điều đó như bệnh dịch từ bây giờ. Tôi không biết rằng điều này cũng sẽ giúp bạn, tôi đã không kiểm tra nó, nhưng đó là ý tưởng duy nhất tôi có cơ hội làm việc. Ngoài ra, người dùng có quyền, không phải quá trình.
hút thuốc 2345

Chỉ cần đọc liên kết đầu tiên trong câu hỏi.
Mikhail Morfikov

0

Pulseaudio được bắt đầu thông qua xdg autostart, có thể được tìm thấy bên dưới ~/.config/autostart/. Có một tệp được gọi pulseaudio.desktopvà trong tệp đó tôi đã thay đổi execdòng mặc định thành dòng này:

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

Khi tôi đăng nhập vào hệ thống, quy trình pulseaudio trông như thế này:

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

Và bây giờ tôi có thể nghe nhạc mọi lúc. Tôi nghĩ rằng đây là giải pháp tôi đang tìm kiếm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.