プロセスが特定のデバイスを使用できるようにアクセス許可を設定する方法はありますか?


12

たとえば、ここで読むことができるように、systemdの一部であるlogindは、一部のデバイスにユーザーセッションのアクセス許可を設定できます。この種の動作が実際にどのように機能するかを示すvidもあります。簡単に言うと、開始して、たとえばamarokで曲を再生すると、ログインプロンプトしかない別のユーザーまたはTTYに切り替えるまで、音が聞こえます。これは、アクティブなセッションが非アクティブになったためです。

特定のグループ(この場合は「オーディオ」)にユーザーを1つまたは複数追加するだけで問題が解決することはわかっていますが、別の解決策があるかどうか疑問に思っています。私が本当に欲しいのは、すべてのユーザーがセッションをロックしている場合でも、プロセスが常にサウンドカードを使用できるように、プロセスにいくつかのアクセス許可を設定することです。

それは可能ですか?私は音楽をよく聞くので、ほとんどの場合モニターをオンにしておく必要はないので、画面をロックするだけでいいのでお願いします。しかし、画面をロックすると、アクティブなセッションが非アクティブになり、amarokが再生を停止します。そして、はい、画面は単にオフにするだけでなく、ロックする必要があります。

編集:

systemdが搭載されている場合もまったく同じ問題になるので、どのディストリビューションを使用しているかは重要ではないと思います。とにかく、私はdebian sidを使用していますが、systemd、udev(およびいくつかの依存関係)などの一部のパッケージは実験的なブランチからのもので、現在は219-9バージョンです。


1
おそらく実行するnohup program_x & ; disownことが役立つかもしれません。または画面
JustMe

しかし、プロセスはうまく機能します。画面をロックすると、少なくとも画面のロックを解除するまで、サウンドカードを使用できなくなります。
ミハイルモルフィコフ2015年

loginctl enable-lingerアカウントに使用してみましたか?
2015年

Arch 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.ため、非アクティブなユーザーセッションには関係ありませんsystemd --user
ミハイルモルフィコフ2015年

ロックした後、眠っている間、Fedora 21ラップトップで音楽を再生したままにします。そのため、systemdが原因で、コンピューターの画面をロックしてもセッションが非アクティブとしてマークされるとは思いません。
Bratchley、2015年

回答:


1

使用しているLinuxのバージョン/フレーバーはわかりませんが、サウンドデバイスのACLはudevルールを介してConsoleKitによって制御されているようです。私のDebianホストでは、/ lib / udev / rules.d / 70-udev-acl.rulesに以下のようなものが表示されます

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

これをタグ付けしないで遊ぶので、コンソールキットはサウンドデバイスをデータベースに追加せず、サウンドデバイスのACLを管理しません


デスクトップ上で、コメントを上記の行で再起動後に確認しました。サウンドデバイスのACL管理が不要になり、画面をロックした状態で曲を再生できます
VenkatC、2015年

質問を更新しました。さて、consolekitは時代遅れのものです-あなたはここでそれについてもっと読むことができますfreedesktop.org/wiki/Software/ConsoleKitを、そして私のシステムは、それを使用しません。Logindはその代わりに使用され、基本的に同じことを行います。私はあなたが私に与えた行をコメントアウトしようとしました、そして再起動後、私のシステムはサウンドカードを全く見ません。それがうまく機能したとしても、私がこのソリューションを使用することはないと思います。これは、ユーザーをオーディオグルー​​プに追加するのと同じことになるためです。少なくとも、このように表示されます。
ミハイルモルフィコフ2015年

おかげで、ログインの詳細を確認しました。そうです、同様のことをしています。これは、管理するデバイスを識別するためのudev TAG 'uaccess'を探しており、それは/lib/udev/rules.d/70-uaccess.rulesにあります。それはすべて基本的なUNIXの権限に帰着します。私の意見では、これらのオプションがあります1)udevを介してサウンドカードのタグを削除します。そのため、logindはオーディオデバイスとロック画面を管理せず、ユーザーを切り替えます-サウンドデバイスの権限は変更しません。2)amarokバイナリを見つけて、そのグループをオーディオに設定し、それをsetgidに設定するだけで、効果的なグループがオーディオになる
VenkatC

2つ目の解決策を確認しましたが、残念ながら機能しません。私はセット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"
ミハイルMorfikov

うーん、GUIでのsetuidプログラムの実行は、例:gtk.org/setuid.htmlのセキュリティ上の理由から、かなり複雑でブロックされているようです。私はもっ​​と研究してあなたに知らせます、これは良いものです-新しいことを学ぶ!
VenkatC 2015年

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これらのグループを通常のユーザーとして変更できないと思います。グループの変更が必要な他のサービスがありますが、これは通常のシステムデーモンであり、問​​題なく動作します。`
ミハイルモルフィコフ2015年

Amarokサービスがrootによって開始されていませんか?Amarokが他の蛹のために他のグループ許可を必要とする可能性があります。残念ながら、それほど簡単ではありません。
Otheus

それはただの音楽プレーヤーです。:)
ミハイルモルフィコフ2015年

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)はいくつかの権限を必要とするだけで、それが可能である場合でも、それらを設定する方法がわかりません。
ミハイルモルフィコフ2015年

どのような許可が必要だと思いますか?ttyを切り替えたからといって、systemdがデバイスのアクセス許可を変更しているのではないかと私は強く疑っています。これがあなたに役立つかどうかはわかりませんが、私はテストしませんでしたが、私が持っている唯一のアイデアは、働く可能性があります。また、ユーザーにはプロセスではなくパーミッションがあります。
smokes2345

質問の最初のリンクを読んでください。
ミハイルモルフィコフ2015年

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.