프로세스가 특정 장치를 사용할 수 있도록 권한을 설정하는 방법이 있습니까?


12

예를 들어 here 에서와 같이 systemd의 일부인 logind는 사용자 세션에 대한 일부 장치에 대한 권한을 설정할 수 있습니다. 이런 종류의 행동이 실제로 어떻게 작동하는지 보여주는 비디오도 있습니다. 간단히 말해, 시작하면 amarok이라고 말하고 노래를 재생하면 로그인 프롬프트 만있는 다른 사용자 나 TTY로 전환 할 때까지 소리가 들립니다. 활성 세션이 비활성화 되었기 때문입니다.

특정 그룹 (이 경우 "오디오")에 사용자 (또는 사용자)를 추가하면이 문제가 '수정'되지만 다른 해결책이 있는지 궁금합니다. 내가 정말로 원하는 것은 모든 사용자가 세션을 잠근 경우에도 항상 사운드 카드를 사용할 수 있도록 프로세스에 대한 일부 권한을 설정하는 것입니다.

가능합니까? 나는 종종 음악을 듣고 있기 때문에 묻는데 대부분의 시간에 모니터가 필요하지 않으므로 화면을 잠그기 만하면됩니다. 그러나 화면을 잠그면 활성 세션이 비활성화되고 아마록 재생이 중지됩니다. 그리고 네, 화면이 꺼져 있어야합니다.

편집하다:

보드에 시스템이 있다면 정확히 같은 문제가 될 것이기 때문에 어떤 배포판을 사용하고 있는지는 중요하지 않다고 생각합니다. 어쨌든, 나는 데비안 sid를 사용하고 있지만 systemd, udev (및 일부 종속성)와 같은 일부 패키지는 실험 브랜치에서 왔으며 이제는 219-9 버전입니다.


1
아마도 달리는 것이 nohup program_x & ; disown도움이 될 수 있습니다. 또는 화면
JustMe

그러나 프로세스는 잘 작동합니다. 화면을 잠그면 적어도 화면 잠금을 해제 할 때까지 더 이상 사운드 카드를 사용할 수 없습니다.
Mikhail Morfikov

loginctl enable-linger계정에 사용해 보셨습니까 ?
spuk

아치 위키에 따르면 : 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 랩톱에서 계속 재생합니다. 따라서 컴퓨터 화면을 잠그면 시스템으로 인해 세션이 비활성으로 표시되어야한다고 생각하지 않습니다.
Bratchley

답변:


1

확실하지 않습니다. 사용중인 Linux 버전 / 맛은 확실하지 않지만 사운드 장치 용 ACL은 udev 규칙을 통해 ConsoleKit에 의해 제어되는 것처럼 보입니다. 내 데비안 호스트에서 /lib/udev/rules.d/70-udev-acl.rules에 아래와 같은 내용이 있습니다.

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

태그를 지정하지 않고 플레이 할 수 있으므로 콘솔 킷은 사운드 장치를 데이터베이스에 추가하지 않으며 사운드 장치의 ACL을 관리하지 않습니다.


위의 줄과 재부팅 후 주석으로 데스크탑에서 확인했습니다. 더 이상 사운드 장치에 대한 ACL 관리가
없으며

질문을 업데이트했습니다. 이제 콘솔 킷은 더 이상 사용되지 않는 항목입니다. freedesktop.org/wiki/Software/ConsoleKit 에서 자세한 내용을 읽을 수 있으며 내 시스템에서는 사용하지 않습니다. Logind는이를 대체하며 기본적으로 동일한 기능을 수행합니다. 당신이 나에게 줄을 말하려고했는데 재부팅 후 시스템에 사운드 카드가 보이지 않습니다. 그것이 잘되고 이것이 잘 작동하더라도, 나는이 솔루션을 사용할 것이라고 생각하지 않습니다. 그것은 오디오 그룹에 사용자를 추가하는 것과 같은 것이기 때문입니다. 적어도 이런 식으로 그것을 보았습니다.
Mikhail Morfikov 7:14에

감사합니다. 로그인 한 세부 정보를 살펴 보았습니다. 예, 비슷한 일을하고 있습니다. 관리 할 장치를 식별하기 위해 udev TAG 'uaccess'를 찾고 있으며 /lib/udev/rules.d/70-uaccess.rules에 있습니다. 그것은 모두 기본 유닉스 권한으로 내려갑니다. 제 생각에 이러한 옵션이 있습니다 .1) udev를 통해 사운드 카드 태그를 제거하십시오. 그래서 로그인하면 오디오 장치를 관리하지 않으며 화면을 잠그고 사용자를 전환하면 사운드 장치의 권한이 변경되지 않습니다. 당신은 원하는대로 perms를 설정할 수 있습니다. 2) 단순히 amarok 바이너리를 찾아 그룹을 오디오로 설정하고 그룹화 할 수 있습니다. 따라서 효과적인 그룹은 오디오가됩니다.
VenkatC

두 번째 해결책을 확인했지만 불행히도 작동하지 않습니다. audio groupamarok 바이너리로 설정 했으며 권한은 다음과 같습니다.. -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

흠, GUI에서 setuid 프로그램을 실행하는 것은 보안상의 이유로 예를 들어 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그룹을,하지만 당신은 펄스 오디오를 사용하는 경우이 문제가되지해야하고, 그런 경우. systemd의 서비스와 관련하여 시도했지만 다음과 같은 오류가 발생했습니다. Failed at step GROUP spawning /usr/bin/amarok: Operation not permitted. amarok.service: main process exited, code=exited, status=216/GROUP이 그룹을 일반 사용자로 변경할 수 있다고 생각하지 않습니다. 그룹 변경이 필요한 다른 서비스가 있지만 정상적인 시스템 데몬이며 정상적으로 작동합니다. `
Mikhail Morfikov

Amarok 서비스가 루트로 시작되지 않습니까? Amarok은 다른 강아지에 대한 다른 그룹 권한이 필요할 수 있습니다. 너무 나쁘지 않습니다.
Otheus

음악 플레이어 일뿐입니다. :)
Mikhail Morfikov

0

VNC 프레임 버퍼에서 플레이어를 실행하는 것은 어떻습니까? 민트 17에서 ...

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

https://en.wikipedia.org/wiki/Xvfb에 설명 된대로 VNC를 사용하여 데스크탑을 볼 수 있습니다.


나는 Usage scenarioswiki 링크를 읽었으며 여기에 해당되는 것은 없다고 생각합니다. 프로세스 (amarok)에는 약간의 권한이 필요하며 가능한 경우 권한을 설정하는 방법을 모릅니다.
Mikhail Morfikov

어떤 권한이 필요하다고 생각하십니까? tty를 전환했기 때문에 systemd가 장치에 대한 권한을 변경하는 것이 의심 스럽습니다. 그렇다면 전염병처럼 피하기 위해 최선을 다할 것입니다. 나는 이것이 당신에게 도움이 될지 모른다, 나는 그것을 테스트하지 않았지만, 그것이 내가 일할 수있는 유일한 아이디어라고 생각한다. 또한 사용자에게는 프로세스가 아닌 권한이 있습니다.
smokes2345

질문의 첫 번째 링크를 읽으십시오.
Mikhail Morfikov

0

Pulseaudio는 xdg 자동 시작을 통해 시작되며, 아래에서 찾을 수 있습니다 ~/.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.