Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

キー入力をスクリーンキャストする

はじめに

前回の記事「git worktree と peco」の実演(gif アニメ)にて、キー入力を表示するために screenkey というソフトウェアを使いました。使用するにあたり、少しコツ(バグフィックス?)が必要だったので、備忘のためここに記します。

screenkey のサイトより:

なお、今現在 screenkey は Wayland 環境では動作しないので、使用する場合は Xorg 環境で使用します。

動作確認環境:

tagi@ubuntu-vm:~$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

tagi@ubuntu-vm:~$ echo $XDG_SESSION_TYPE
x11

インストール

まず、slop をインストールします。ドキュメントにはいくつかの関連パッケージの記載がありますが、Ubuntu 22.04 をインストールした時点で大方揃っています(Ubuntu 22.04 の "Minimal installation" でも揃っている)。ただ、slop だけは追加でインストールします。

sudo apt install slop

次に screenkey をインストールします。apt でのインストールも可能ですが、動きにアヤシイ部分があるため、ソースコードを取得し、変更してから使用します。バージョンは最新リリースである v1.5 を使用します。

バージョンを指定してソースコードを clone します。

git clone https://gitlab.com/screenkey/screenkey.git -b v1.5

以下のパッチを適用します。

fix-regular-window-mode.patch:

diff --git a/screenkey b/screenkey
index 1d4cd45..5a88af8 100755
--- a/screenkey
+++ b/screenkey
@@ -46,7 +46,7 @@ def main():
                     help=_("set vertical position"))
     ap.add_argument("--persist", action='store_true', default=None,
                     help=_("make window persistent"))
-    ap.add_argument("--window", action='store_true', default=None,
+    ap.add_argument("--window", action='store_true', default=False,
                     help=_("use a regular window for display (implies --persist)"))
     ap.add_argument("-s", "--font-size", choices=FONT_SIZES,
                     help=_("set font size"))

※ファイルのアップロードの方法がわからなかったので、上記をコピーしてファイル保存してください

パッチの適用ですが、作業ディレクトリのルートで、

git apply fix-regular-window-mode.patch

とすることで適用できます。git diff を叩いて、上記テキストと同じ内容が表示されれば正しく適用されているということです。

これで準備完了です。

起動

リポジトリにある screenkey が起動スクリプトになっているので、これを叩くことで起動します。

./screenkey

起動すると、トップバーに screenkey のアイコンが表示されます。各種設定、終了はこのアイコンを右クリックすることで操作できます。

screenkey のアイコンとメニュー:

設定(Preferences):

初期状態では、キー入力は画面下部に大きく表示されます。ターミナルに表示させるには「Select window/region」ボタンを押下し、ターゲットとするターミナルのウィンドウを選択します。

※先の手順で slop をインストールしていないとこの設定はできません!

Select window:

ウィンドウの選択ではなく、マウスで表示領域(region)を指定することもできます。ウインドウの選択では少し広めに clip するので、気に入らない場合はこの方法で領域を選択してください。

Select region:

あとはお好みにより、フォントの変更や表示させておく時間の変更などができます。

(英語が良くわからないので詳細は各自おねがいします。。)

バグ?

バージョン 1.5 をそのまま使用すると、キーの表示がウィンドウとなって表示されっぱなしになってしまう(regular window mode が常に ON になる)ことがあります。

バグ?(screenkey ウィンドウが出てる):

期待する表示:

この問題は、以下の commit で混入してしまったものと思われます。experimental とあるのでいずれは直るものと信じ、ここでは手動での patch 適用に留めています。

Add experimental regular window mode (60d85191) · Commits · screenkey / screenkey · GitLab

なので、上記パッチは暫定対処の扱いでお願いします。

おしまい

あと、まれに終了時にエラーが出力されることがあります。終了時なのであまり気にしてないですけど、今後何かわかれば追記したいと思います。