問題タブ [evdev]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - OpenWrt 用の Python Evdev バインディング
良い一日、
私は学生です。少しお時間をいただきたいと思います。USBポートを介してボード名Arduino Yunに接続されたバーコードリーダーに取り組んでいます。このボードは、Atheros AR9331 という名前のマイクロプロセッサを使用して、OpenWrt から派生した組み込み Linux のバージョンを実行します。
Python Evdev バインディング (python-evdev.readthedocs.org/en/latest/) をこのタイプの MIPS マイクロアーキテクチャで実行できるようにするには、何が必要ですか? 現時点では、Ubuntu と ArchLinux のみに対応しています。クロスコンパイルが必要になるか、このLinux内で特定のCコンパイラが使用されていることを示していると推測しています。
OpenWrt でサポートされている現在の python バージョンは 2.7.3 です。PC で C コードをコンパイルすると、結果の実行可能ファイルはこのタイプのアーキテクチャでのみ実行されます。そのコンパイルされたプログラムをマイクロプロセッサ内で使用すると、機能しません。PCのubuntu内でこのバインディングを問題なく使用しました。setuptools の以前のインストールで、python setup.py install の指示に従いましたが、問題なく動作しました。
しかし、OpenWrt に関しては、そうではありませんでした。
私が使用している Python スクリプトでは、デバイスからデータにアクセスするために、コードの最初の行にこのライブラリが必要です (キーボードの /dev/input/event0 のように機能します)。
#!/usr/bin/env python
from evdev import InputDevice, ecodes, list_devices
from select import select
ライブラリ全体をarduino内にコピーし、同じフォルダー内でスクリプトを実行するという提案を見てきました。しかし、evdev モジュールには MIPS ではなく PC のアーキテクチャで作成されたファイルがあるため、これは機能しません。
では、エラーに対して表示されるメッセージは何ですか? Openwrt で実行python setup.py install
して evdev バインディングをインストールしようとすると、画面に次のように表示されます。
File "setup.py", line 10, in <module>
from setuptools.command.develop import develop
ImportError: No module named setuptools.command.develop
ここから、前述のモジュールが必要であることは明らかです。そこで、このスクリプト (pypi.python.org/pypi/setuptools) でインストールしようとしました:
python ez_setup.py
そして出力はこれを示します:
Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-11.3.1.zip
Traceback (most recent call last):
File "ez_setup.py", line 332, in <module>
sys.exit(main())
File "ez_setup.py", line 327, in main
downloader_factory=options.downloader_factory,
File "ez_setup.py", line 287, in download_setuptools
downloader(url, saveto)
File "ez_setup.py", line 209, in download_file_curl
_clean_check(cmd, target)
File "ez_setup.py", line 169, in _clean_check
subprocess.check_call(cmd)
File "/usr/lib/python2.7/subprocess.py", line 511, in check_call
raise CalledProcessError(retcode 、cmd)
subprocess.CalledProcessError: Command '['curl',
' https://pypi.python.org/packages/source/s/setuptools/setuptools-11.3.1.zip '、'--silent'、'--output'、'/mnt/sda1/evdev -0.4.6/setuptools-11.3.1.zip']' がゼロ以外の終了ステータス 60 を返しました
この出力は、 pypi が OpenWrt の python 2.7.3 には存在せず、新しいバージョンと他のアーキテクチャにのみ存在するという事実によるものだと思います。Evedv バインディングは、物事をより簡単かつ標準にするために setuptools モジュールを必要としていますが、バインディングがターゲット アーキテクチャでサポートされていない場合、とにかくそれを使用できるようにするために何が必要ですか?
御時間ありがとうございます、
python - カスタムデーモンを使用してLinuxでキーボード入力を傍受する方法は?
Linuxマシンに接続された特別なキーボードにバインドできるデーモンを、できればPythonを使用して構築しようとしています。特別なキーボードはバーコード スキャナーですが、HID インターフェイスを備えています。
マシン上で X を実行することは避けたいのでevdev
、python バインディングのような低レベルのものが適切と思われます。
私の提案は次のとおりです。
- カスタム udev ルールを使用してキャラクター デバイスを生成し
/dev/input/barcode0
、権限を修正してデーモンがデバイスにアクセスできるようにします。 - 入力を取得するために使用
evdev
します。
このアプローチは実現可能ですか?キーボード イベントはどうなりますか? マシン上の実行中のコンソールに渡されないようにそれらを消費することは可能ですか?
SO で同様の問題に関する質問を見つけましたが、私が使用していない X サーバーを使用しています。
python - Python twisted を使用した Linux での HID アクセスと evdev の統合
Linux マシン (Debian wheezy) で、次のことを行うイベントベースのサーバーを作成しようとしています。
入力デバイス (特別なキーボード) への排他的な入力を取得して、キーストロークが通常のイベント チェーンに入らないようにします。
ツイスト リアクターのイベントに登録する
イベントの待機から返された deferred にコールバックを登録します。このコールバックは、特別なキー シーケンスを受信した後に HTTP 要求を送信します。
これは、pyevdev
パッケージのサンプル コードです。通知を受け取り、それに応じてキーストロークを受け取ることができます。
read_loop()
コマンドのソース コードを見ると、select
twisted に似たステートメントも使用されています。
私の質問
このコードを python Twisted に統合するにはどうすればよいですか? 1 つのアイデアは、基になるキャラクター デバイスを調べて、/dev/input/event0
ブロックしない方法で読み取ることです。if が通常のファイルである場合、inotify の行に沿って何かを使用しますが、この場合はわかりません。
evdev パッケージのサンプル コード
python - Python 2.7 と Python 3.3 の両方に evdev をインストールするにはどうすればよいですか?
Raspian オペレーティング システムを使用して、Raspberry Pi で Python を使用しています。インストールevdev-0.4.7
したところ、Python 2.7 で問題なく動作しました。しかし、Python 3.3 で試してみると、エラーが発生します。どうやらPython 2.7にしかインストールされていないようです。
evdev
Python 3.3 にもインストールするにはどうすればよいですか?
raspbian - 古い Raspberry Pi ではハンドルが認識されるが、新しい Raspberry Pi では認識されない
より高速な速度を利用するために、新しい Raspberry Pi 2 を購入しました。古い Raspberry Pi で使用していたプログラムevdev
が、新しい Raspberry Pi でも実行されます。
しかし、アクセスに使用するハンドルevdev
は、古い Raspberry Pi では認識されますが、新しい Raspberry Pi では認識されません。
どちらの Raspberry Pi も Raspbian を実行します。新しい Raspberry Pi にハンドルを認識させるためにインストールする必要があるものはありますか?
古い Raspberry Pi にそのようなものをインストールした覚えはありませんが、ハンドルは問題なく動作します。
更新: 古い Raspberry Pi に最新バージョンの Raspbian をインストールしようとしましたが、ハンドルが動作しませんでした。したがって、問題なのは新しい Raspberry Pi ではありません。Raspbian の新バージョンです。ドライバーか何かが欠けているに違いありません。しかし、私はそれを修正する方法がわかりません。
更新 2: Raspbian の新しいバージョンでは、起動中にハンドルが USB デバイスとして認識されますが/dev/input/event*
、/dev/input/js*
.
python - Python プログラムで evdev と tkinter を使用する
gphoto2 を使用してカメラを制御する Python プログラムを作成したので、フォトブースを作成できます。ユーザーに入力用のキーボードまたはマウスを提供する代わりに、xin-mo コントローラーを購入したので、シンプルなアーケード スタイルのボタン インターフェイス (写真を撮る、写真を拒否する、写真を受け入れるなど) を提供できます。
Python プログラムは Tkinter を使用して記述されており、evdev を使用して xin-mo から入力イベントを読み取ります。私が xin-mo イベントに使用しているコードは次のようなものです:-
それは機能し、ボタンを押すと何かをすることができます。
私が理解できないのは、どうすれば evdev と Tkinter を連携させることができるかということです。私が見つけたものから、メインループを呼び出して GUI をレンダリングする必要があります...しかし、メインループに入ったら、xin-mo コントローラーから入力イベントを読み取るにはどうすればよいですか??
私はPythonに非常に慣れていないので、明らかな何かが欠けている可能性があります。
ありがとう、スティーブ。
linux - XInput2 デバイスを sysfs ノードにマップする
によって報告された XInput2 デバイスをXIQueryDevice
適切なsysfs
ノードに変換するにはどうすればよいですか? デバイスは、evdev
入力ドライバーによって処理される汎用 HID デバイスです。
デバイスの を取得できることはわかってname
います。Xorg.0.log
を見て、このデバイスが追加されたときの適切なログ メッセージを見つけようとすることができるかもしれません/dev/input/event*
。それに関連するデバイス ノードが記載されていることを期待しています。または、 内のすべての入力イベントをsysfs
調べて、その名前のイベントを探し、その名前が一意であり、XInput を介して報告されたものと同一であることを期待します。しかし、これらのいずれよりもクリーンなソリューションがあることを願っています。