オマケ:keymapper解説(物理キーボードからの出力を自在に操れる)

★アプリ解説:keymapper

keymapperの仕様です。


https://play.google.com/store/apps/details?id=io.github.sds100.keymapper


音量ボタンや外部キーボードからの入力を

好き勝手弄れます。

画面がオフのときは発動しません。


分からない所ありましたらどうぞ。

随時追記します。


事前注意


・shizuku併用がベスト


https://play.google.com/store/apps/details?id=moe.shizuku.privileged.api


ADB通して入れてくださいね。

(ADBの通し方は前の項目をどうぞ)


(というか、Shizukuを入れないと

keymapperのIMEでしか動かない

→キーコードを発行できても

英字でしか入力されない

→つまり、ほとんど意味がない)


・taskerやmacrodroidの相性が悪いので

ショートカットで引用しないこと。

(Broadcast発行のIntentでやり取りするのが吉)


・Taskerで音量ボタンの

長押しプロファイルでタスクを

組んでいると、keymapperとかち合って

長押しプロファイルが効かなくなることがあります。


keymapperをオフにしてても、音量ボタンに設定を

割り振ってなくてもかち合っちゃうっぽいです。



各項目説明


「トリガー」


・長押しの処理


長押し(短)→長押し(長)は入力が上書きされない。


例1


①トリガーキー:A(Long press)

アクション:キーコード7(0)

Option(delay:300ms)


②トリガーキー:A(Long press)

アクション:キーコード8(1)

Option(delay:400ms)


この2つのリマップがある場合

300ms長押しで「0」が

400ms長押しで「01」が入力される。



単押し→長押しは入力を単押しから

長押しに上書きできる。


例2


①トリガーキー:A

アクション:キーコード7(0)


②トリガーキー:A(Long press)

アクション:キーコード8(1)

Option(delay:400ms)


この2つのリマップがある場合

単押しで「0」が

400ms長押しで「1」が入力される。


携帯の音量ボタンだと入力が強いですが

bluetoothキーボードだと不安定で

複数組むとバグって地(元のキー)が出ます。



・ダブルクリックの処理


使えることは使える…けど

Bluetoothキーボードからだと

どうしてもラグい。


→いっそkcmで元キーを意味のないキーにして

順序押しの周期短くして使ったほうが良さそう。



・同時押しの処理

これが一番正確。順序を入れ替えることで逆にもできる。


例3

キーA+キーB → キーC発行

(Aを押しながらBを押すとキーCが入力される)


キーB+キーA → キーC発行

(Bを押しながらAを押すとキーCが入力される)


・シークエンス(順番押し)の処理


①トリガーキー:A→B

アクション:キーコード7(0)


②トリガーキー:A

アクション:キーコード8(1)




これも長押し同様に、上書きされないまま

「10」と入力される。

んじゃあ元キーをdo nothingにすれば?

→出来はするけどバグりやすい。


kcmで元キーを意味のないキーに

変換したほうが安全だと思います。





「アクション」


・input keyevent


キーコードを入力します。

IMEが日本語なら日本語で入力できます。

当然変換も可能です。

(ただし、Shizukuを併用する必要アリ)


修飾キーもつけられますが

例えばkeycode 46(r)で

ctrlに✓を入れて

ctrl+rを発行しようとしても

発動しないことがあります。


この場合、アプリ・もしくはAndroidのどちらかが

その特殊キーの発行に対応していません。

(たしか、android9やandroid10とかで

エラー吐いてたような気が…)


こういうときはtaskerの方の

「キーボード」アクションを使えば動きます。



あと、taskerやmacrodroidの

ショートカットに組み込んでる時も

動作が怪しかったような…

(だから、Intentの送受信で

なんとかする必要があったんですね)



・タップ

座標指定でタップしてくれる。

座標がわからない?ご安心を。

スクショを読み込ませることで

自動でX.Y座標を取得してくれます。

(ただし、当然使ってるスマホと

同じ解像度じゃなきゃダメです)


(使ってるスマホの解像度が

2340×1080なのに

600×400の画像なんて

読ませられない訳ですね)


・send intent

インテントを投げられます。

taskerやmacrodroidの連携には

必要不可欠です。


〜〜〜〜〜〜以下、intentの種類〜〜〜〜〜


①Activity

他のアプリの動作を呼び出せます。

「can't be empty!」のところに

適当に文字入れて

項目は「Activity」を選択。


あとは「Choose Activity」ボタンから

目当てのインテントを探すだけです。




②Broadcast receiver

Taskerやmacrodroidに

インテントを投げ、作動させる

ことができます。


「can't be empty!」のところに

適当に文字入れて


項目は「Broadcast receiver」を選択。


記載例は…taskerの「インテント受信」のプロファイルを

https://kakuyomu.jp/works/16817330663198601284/episodes/16817330665899079781

受け取れるようにするには、こう書きます。


──────────────────────────

description for keymapper(keymapperでの名前)→tekitou

送信方法→broadcast

Action→nanka.tekitouna.MOJI

category・data・flag→「なし」

package→net.dinglisch.android.taskerm(taskerで受け取るので)

class→「なし」

──────────────────────────



・do nothing


元のキーを無効にする。

他のリマップ(上書き)を

重ねすぎると動作しなく

なるときがあったり…


・テキスト入力

指定のテキストを入力します。

ただし、IMEがkeymapper GUIの

時しか発動できません。


なので、ADBでシステム設定の変更の認可

(pm grant io.github.sds100.keymapper android.permission.WRITE_SECURE_SETTINGS)

を与え、キーボード変更ができるようにしてから

こういうタスクを組みます。



①トリガーキー:A(Long press)

アクション:IME変更(keymapper)

Option(delay:50ms)


②トリガーキー:A(Long press)

アクション:テキスト入力(てきすと)

アクション:IME変更(Gboard)

Option(delay:100ms)


こうすることによってダブルタップで

「てきすと」と入力することができます。

(通常だと1度で出力してくれるはずだが

この場合はダブルタップじゃないと無理っぽい)


「作動条件(Constraint)」

作動する条件を指定できます。

〇〇というアプリが

フォアグラウンド(作動している)時

とかいう風ですね。

条件式はorとandが使えます。




「オプション」

特段、解説するところはなし。長押しの時間指定くらいだし

keymapperのショートカットはバグるため基本使わない。




以下補足事項。


・コードの強弱。

キーコードにも強弱があります。基本的にAndroidのキーのやり取りは

物理入力→GUI(kcm)→IME(入力アプリ)→システム→keymapper

と変換しながら受け渡されるので


ADB発行(kcmやIMEがなんだろうと指定のキーを発行できる)

>kcm発行キー(同時押しによる特殊キー発行が可能)

>keymapper(一部の特殊キーが発行できない・上書きが行えない)


となるわけです。


で、kcmはおいといてkeymapperの方ですが

例を上げるとshiftキーが分かりやすいですね。


Shift自体をdo nothingとして

shift+Aで「←」(keycode 20)を

発行できるようにしたとしましょう。


この時点でのキーボードのキーは

shift=ナシ

shift+A=「←」のハズですが


しかし、keymapperの権限が弱いため

shiftを上書きすることができず

結果として発行されるのは「shift+←」(左選択)

になってしまうわけです。



capsとかAltとか(ctrlはどうだっけ…?)も同じで

do nothing にしても元のキーが

消えない&誤作動の危険があるため

迂闊にはリマップ(上書き)できません。


ちなみにfnに至っては

トリガーで検知されない(≒上書きできない)上に

kcmでも変更出来ません。

あのキーだけ特殊なんですよね。


あ、ちなみにキー発行とキー上書きは別で

他のキーをctrlやshiftに置き換えるのは

大丈夫だった(はず)です。


(でもたしか、Androidのバージョンが

〜10だと反応しなかった覚えが…)


(それはそうとしてショートカットだから

元のキーが悪さすると怖い、というのも…)


同時押しなら多分誤動作も少なそうじゃありますが…

素直に根本であるkcm弄ったほうが安全だと思います。






以下Q&A


・トリガーが壊れた

設定→アプリ情報から1度アプリを停止。


・英字入力になるんだけど…

IMEかもしくはcapslockのせい。


(だから、kcmでcapsを他のキーに

変更する必要があったんですね)


・Shizukuの認可がいちいち面倒…

taskerのADBでもできますぜ。

sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh













  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る