Skip to content

Linux環境とMac環境でのpynputのバージョンアップ(v1.7.7まで)の対応について #38

@our-holyland

Description

@our-holyland

現状、Windows以外ではキー入力に制限がかかっております。しかし、pynputのバージョンアップに伴い、改善された内容もあるので、その経緯をまとめ、それに対応するパッチを作成してみました。
お手数ですがご確認頂けますと幸いです。

【理想(Windows)の動作】
・pynputでキー入力を制御を行れており、内部処理的には、pynputのlistener()でキー入力の受付開始を行い、pynputのstop()でキー入力の受付停止を行う
・"Use keyboard"がON、かつぽけこんのウィンドウがフォーカスされている場合は、キー入力の受付が有効
・"Use keyboard"がOFF、かつぽけこんのウィンドウがフォーカスされていない場合は、キー入力の受付が無効

【過去の経緯(ネットで調べた情報を説明させて頂きます)】
本家ぽけこんを開発時(2021年7月以前)にて、(Gitの更新履歴より推察した限り)Linux環境にてpynputのlistener()のタイミングでぽけこん自体がクラッシュするという事象が発生し、pynputのlistener()を一部制限する対応がとられました。
またMac環境でも同様の問題が発生し、Linux環境と同様の対応がとられました。
#15

【対応方法】
・Linuxの場合
2025/4/5時点で、pynputに以下修正が行われており、Modified版とExtension版に後述のパッチを当てれば、Windows同様にキー入力の受付が有効/無効が行われることが確認できました。

以下、pynputのCHANGES.rstの抜粋
///////////////////////////////////////////////////////////////////
v1.7.7 (2024-05-10) - Various fixes
Do not crash in del on Xorg if display creation fails. Thanks to Gabriele Pongelli!
v1.7.6 (2022-01-01) - Various fixes
Stop the recording context asynchronously on Xorg.
v1.7.5 (2021-11-19) - Various fixes
Corrected crashes on Xorg when a listener was configured to suppress system events. Thanks to jpramosi!
///////////////////////////////////////////////////////////////////

・Macの場合
Modified版のIssueの問題は、正確には"macでpokecon開くところまではできたのですが操作をするとすぐにクラッシュ"するとのことでした。これは本記事における"実行用ファイルの作成"の項で述べたsudoでの実行、及び"pynputの設定"の項で述べたアクセシビリティの権限の設定の、両方を行わなずに起動した場合の動作と合致します。
なので適切に設定して起動すればIssueの問題は解決できると考えてます。
https://hokkesan.hatenablog.jp/entry/2023/01/22/225628
https://note.com/our_holyland/n/nf66e1dd983be

しかし、それとは別で問題があり、TkinterのGUI起動中はpynputのlisten()が出来ない(実際クラッシュします)とのことです。
moses-palmer/pynput#366

【Macでのパッチ適応後の動作】
本事象の対策として、後述のパッチを当てると以下の動作となります。
・前回ぽけこん終了時の"Use Keyboard"のON/OFFによって、キーボード入力の有効/無効が切り替わる。ポケコン起動中は有効/無効が切り替わらない。
・ぽけこんのウィンドウのフォーカスイン/フォーカスアウトによってキーボード入力の有効/無効が切り替わらない。

pokecon_pynput_mod.patch.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions