Translate

2019年11月26日火曜日

一般ユーザで実行したら "/dev/uinput" cannot be opened for writing と出る件



    from evdev import uinput, UInput
    from evdev import ecodes as e

Raspberry Pi上で上記のようにevdevパッケージを使ったPythonプログラムを実行しようとしたら、

env) foo@bar:~/tar $ python hogehoge.py
"/dev/uinput" cannot be opened for writing
Have you tried running as root? sudo hogehoge.py
env) foo@bar:~/tar $

というエラーが出た。

virutalenv 上でevdevをインストールしたからかも..
とおもって
virtualenv環境ではなくじかにevdevをインストールして、
sudoをつけて実行すると..うごいた..

でも、このプログラムを一般ユーザでうごかしたい..

ということで調べたら、
以下の方法で動いた。

sudo vi /etc/udev/rules.d/40-uinput.rules

してファイルを新規作成し、

SUBSYSTEM=="misc", KERNEL=="uinput", MODE="0660", GROUP="uinput"

と入力し保存。

つぎに、

sudo vi /etc/modules-load.d/uinput.conf

してファイルを新規作成し、

uinput

と入力し保存。

そして

sudo groupadd uinput
sudo usermod -aG uinput <実行ユーザ名>


して実行ユーザを新規作成したuinputグループに参加させる。

そして

sudo reboot

すればよい。


最近のLinux(raspbeianだけど..)は
ルール関係が複雑で、
入社当時のBSDなんかだと安直に

chmod a+rw /dev/uinput

とかしてたけど、
最近のLinux(raspbeianだけど..)は
ルール関係が複雑なので
こんなことしてもリブートしたらすぐに戻っちゃうだろうから..
(やったことないので、ほんとにそうなるかは、わからないけどね)

0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...