
私は 3D プリンターを持っており、PC は次の方法でプリンターと通信できます/dev/ttyACM0
。
crw-rw---- 1 root uucp 166, 0 16 nov 14:58 ttyACM0
3D 印刷アプリケーションがrepetierHost
機能するには、このデバイスへの読み取り/書き込みアクセスが必要です。準備なしでアプリケーションを「単純に」起動すると、アプリケーションは動作しません。
アプリケーションを root として実行すると動作します。
(補足) グループを持つ通常のユーザーとしてアプリケーションを実行してもuucp
、まだ動作しません。
/dev/ttyACM0
権限フラグを付与しrw-rw-rw-
、通常のユーザーで実行すると、動作します。
uucp
グループ経由の許可がアプリケーションに渡されないのはなぜですか?
ファイルの権限を与えることに反対はしませんrw-rw-rw-
が、デバイスが切断され再接続されると、これらの権限はリセットされます。グループを通じてこれを機能させることができない場合uucp
、代わりに権限フラグの変更を永続化するにはどうすればよいでしょうか?
答え1
repetierHost
アプリケーションのグループを設定してuucp
から、SGID ビットを設定します (実際のバイナリであり、スクリプトではない場合)。
chgrp uucp repetierHost
chmod g+s repetierHost
repetierHostがスクリプトである場合は、それを移動して、呼び出すrepetierHost.sh
小さなCプログラミングラッパーを作成することを検討してください。repetierHost
repetierHost.sh
例えば:
#include <stdlib.h>
int
main(int argc, char *argv[])
{
system("/path/to/repetierHost.sh");
}
答え2
私は見つけたsg
まさに私が必要としていたコマンドのようです:
シンガポール- 異なるグループIDでコマンドを実行する
そこで、次のように最小限のラッパーを記述します。
#!/bin/bash
sg uucp /usr/bin/repetierHost.sh
これは完璧に動作します。