web-dev-qa-db-ja.com

画面で実行されているコマンドラインプログラムにキーボード/ IRコントローラーを接続します

RaspberryPiをGUIなしの音楽プレーヤーとして機能させようとしています。 Arch Linuxをインストールし、sshで使用しています。 IRレシーバードングルもあります。これを使用して、音楽の音量を制御したり、次の曲にスキップしたり、ランダムな曲を再生したりする予定です。

IRドングルはキーボードとして識別し、/ dev/input/event0に書き込みます。最初はLIRCで動作させようとしましたが、キーボードを装ったIRドングルはLIRCではうまく機能しないようです。

私の質問は、IRレシーバーからキーボードのような入力を受け取ったので、それをプログラムにパイプするにはどうすればよいかということです。現在、画面でcmusを使用しています。

セットアップを機能させるための一般的なアドバイスがあれば、喜んで聞きます。そうでない場合は、少なくとも、画面で実行されているプログラムにIRレシーバーキーボードを接続する方法についていくつかのアイデアを知りたいと思います。

編集:

なんてバカなんだ、どうしてただそれを入れようとは思わなかったのか。

ただし、多くの問題があります。

まず第一に、 cat /dev/input/event0つぶやきを出力するだけです(UTF-8端末では次のようになります:�SS�xO��SS�xj��SS�x��SS�CO��SS�Cj��SS�C。1回のキー押下でこれの半分の行を出力し、長押しするほど出力が長くなります。)リモコンのボタンを押すたびに確実に応答しますが、バイトがどのエンコーディングに含まれているかはわかりません。スキャンコードだけなのか、それとも何なのかはわかりません。

次に、sshから制御したいので、入力マルチプレクサが必要です。

第三に、私が次のように入力すると:

cat /dev/input/event0 | screen -rdまたはcat /dev/input/event0 | screen cmus

それは文句を言う:

Must be connected to a terminal.
3
GolDDranks

私はあなたの状況を正しく理解しているかどうかはわかりませんが、

cat /dev/input/event0 | someprogram

/ dev/input/event0に書き込まれるものは何でも、標準入力から何らかのプログラムを読み取る必要があります。

(IRレシーバーをデバイスファイルに書き込む方法を教えてください。これは、IRドングルでは実現できませんでした。)

私の一般的なアドバイスは、pythonスクリプトでファイルから読み取ることです。読み取った文字に基づいて、何かを行うことができます。

inputCharStream = open('/dev/input/event0')
while True:
    c = inputCharStream.read(1)
    if c=='a':
        print "character a"
    if c==chr(1):
        print "byte 1 which is not printable"
        break

ナンセンスを印刷する代わりに、いくつかのpythonライブラリを使用して、何か便利なことをすることができます。

1
foobar