web-dev-qa-db-ja.com

マウスボタンのクリックをカウントするにはどうすればよいですか?

Ubuntuの開始以降、マウスボタンのクリックをカウントするにはどうすればよいですか?

私はそれを必要とするので、マウスボタンクリックの統計を行いたいです。

ありがとう

6
lukasz

xinputは必要なことを実行できます、Lukasz。 することができますワンライナー(まあ、正確にはワンライナーではありませんが、ENTERを1回だけ押す:-D)がありますが、最初に何らかの作業を行う必要があります。私はそれはかなり簡単だと誓います、私はここで明確にするためにほとんどのことを説明します。

ターミナルを開き、次を入力します。

xinput list

私のこの抜粋のように、ポインタ、キーボードボタンなどの素敵なリストを取得できます。

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ USB+PS/2 Optical Mouse                    id=10   [slave  pointer  (2)]
⎜   ↳ PS/2 Mouse                                id=13   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS GlidePoint                  id=14   [slave  pointer  (2)]

USBマウスは2行目にあり、そのIDは1であることがわかります。リスト内でマウスを見つけて、そのIDをメモします。必要なメインコマンドに必要になります。

正しいIDを取得したかどうかを確認するには、xinput test <id>を実行します。マウスを動かしたり、ボタンをクリックしたりすると、ターミナルにたくさんの情報行が表示されます。それはあなたがあなたのマウスでするすべてをリストしています。何も起こらない場合は、ポインタリストから別のIDを試してみてください。おそらく最初は間違ったIDを選択しているでしょう(これはそれほど難しくないはずです)。

最終的に正しいIDを見つけたら、次のコマンドを実行します。

xinput test <id>|sed -une '/release/ {      x
     /^$/ s/^.*$/1/
     G
     h
     s/^/      /
     s/^ *\(......\)\n/\1  /p
     x
     s/\n.*$//
     /^9*$/ s/^/0/
     s/.9*$/x&/
     h
     s/^.*x//
     y/0123456789/1234567890/
     x
     s/x.*$//
     G
     s/\n//
     h
}'

上記をそのままコピーして貼り付けます。 Enterキーを押す前に、<id>を見つけたIDに置き換えます。実行すると、システムの使用を続行しながら、そこにそれを許可します。登録されたクリック数を確認したいときはいつでも、ターミナルを見るだけです。

重要なコメント:

  • 残念ながら、コンソール、シェル、コマンドなどは得意ではありません。誰かがこれを改善したり、より良いソリューションを提供できると確信しています。私のソリューションには不便な点があります。リアルタイムでは結果が得られません。何らかの理由で、バッファリングが発生しているようで、古いイベントを読み取るには、より多くのマウスイベントを生成する必要があります。そのため、クリックしても表示されない場合は、マウスを少し動かすと、最後のクリックがすぐに表示されます。これについては申し訳ありませんが、いくつかのことを試しましたが、まだそれを解決する方法がわかりません。それがあなたにとってそれほど悪くないことを願っています。
  • ご覧のとおり、anyクリックがカウントされています。ボタンの1つだけのクリック数をカウントする場合は、「リリース」を「リリース1」、「リリース2」、「リリース3」に置き換えてください。それらをすべてカウントしたいが、個別の統計を使用したい場合は、個別のターミナルでコマンドを(適切なボタン表示で)実行します。

私が使ったアプローチ:xinput list <id>は汚い仕事をし、マウスで起こるすべてを表示します。次に、この出力をsedにリダイレクトします。これは、 'release'イベントを持つ行のみを解析します。 「リリース」イベントが「クリックプロセス」(ボタンを押し下げてから押し上げる)を終了させると考えるのは問題ないと思います。 sedスクリプトは、「リリース」の行を表示するだけでなく、番号も付けます。このスクリプトはinfo sed(セクション4.7)から直接コピーされており、確実に改善できます。

完全にあなたが望むものではありませんが、 WhatPulse は、そのようなさまざまなtitbitsを追跡するのにうれしいものです+チーム、国などでのオンラインランキング...

0
Ward Muylaert

linux-inputプロジェクト で提供されるevtestを使用できます。

ただし、カーネルにCONFIG_INPUT_EVBUG = yを設定し(デバッグバージョンをインストールする場合はおそらくデフォルト)、デバッグレベルを8に設定する必要があります。

echo 8 > /proc/sys/kernel/printk

この時点で、コンソールから、解析可能ないくつかのメッセージが表示されます。

evbug.c: Event. Dev: gpio-keys/input0, Type: 0, Code: 0, Value: 0
evbug.c: Event. Dev: gpio-keys/input0, Type: 1, Code: 103, Value: 1

その後、bitbakeおよびevtestパッケージをインストールできます

Sudo apt-get install bitbake evtest

次に、デバイスに対してevtestを使用できます。必要な適切なイベントを見つけるためにいくつかのテストが必要になり、そのイベントの発生をカウントできます。

evtest /dev/input/eventXX

それ以外の場合、GDM/XDMにログインしてからクリックのみをカウントしたい場合は、誰かにそれを実行するか、GTKを使用するアプリケーション、QtまたはwxWidgets、Enlightenment、または好きなものを開発してマウスイベントを監視し、 desktopmが起動したらすぐにこのアプリケーションを起動してください。

0
tmow