Pixelでグラフィック周りの不具合が出るアプリはANGLE設定を見るといいかも

まとめ

  • Google Pixelで動かしてるアプリでグラフィック周りの不具合が出たら、
  • 開発者オプションの「ANGLEの設定」で当該アプリの設定を変えてみるといいかも

経緯

バイクに接続してメーターディスプレイにナビを表示するアプリ(Garmin StreetCross)を使っているのだが、スマホをPixel 10に変えてから地図が部分的に読み込まれない現象に悩まされていた。

症状を見るにグラフィック周りの不具合らしく、Pixel 10でゲームが動かないなどの話題があったな〜と思い出しつつサポートにメールで報告してみたところ、すぐに返事が来た。曰く、Pixel 10特有の不具合であってアプリ側での対処は難しいが、端末の設定で改善するかもとのこと。それが冒頭に書いたANGLE設定で、これをdefaultからangleに変更すると確かに改善した。

というわけで、グラフィック周りの不具合があるアプリはANGLE設定を変えてみるといいかもしれない。ゲームでも効果があったりするらしい(Redditの投稿)。

理屈?

ANGLEってなんだろう。Almost Native Graphic Layer Engineの略らしいけど。設定の選択肢がangleとnativeなので、nativeではない何からしい…

Garminのサポート

めっちゃ早く返信いただいた。ありがたい〜

transientを使ってmagitライクなツールを作ってみる

はてなエンジニア - Qiita Advent Calendar 2025 - Qiita の12/23の記事です。


magitEmacsで動くgitクライアントです。 キーを押すとメニューが開き、メニュー内の表示に従ってオプションやサブコマンドを指定することでgitのコマンドを組み立てて実行するのが特徴です。

言葉で説明するのは難しいですが、ブランチ作成→編集→add→コミット→プッシュはこんな感じで行えます:

例えば「ブランチを作成してチェックアウト」は、

  1. bを押してブランチ関連のメニューを開く
  2. cを押してCheckoutグループのnew branchを選択
  3. ベースブランチの名前を入力(このときカーソル上のブランチがデフォルトで使用される)
  4. 作成するブランチ名を入力

という手順で行っています。

このようなキー操作を抽象化したのが magit/transientです。今回はこのtransientを使ってGitHub CLIの小さいラッパーを作ってみます。プルリクエストを一覧してマージできるまでを目標とします。

まずはステータスバッファを作成してプルリクエスト一覧を表示します。 ここは普通にキーマップとメジャーモードを作り、gh pr list --jsonをパースします。

次に作成したメジャーモードのキーマップでtransientを発動させます。

(transient-define-prefix magh-pr-transient ()
  ["Pull Request"
    ("o" "Open in browser" magh-pr-view)
    ("m" "Merge" magh-pr-merge-transient)])

;;; メジャーモードのキーマップの中で
(define-key map "P" 'magh-pr-transient)

これで、Pキーを押すとプルリクエストのメニューが出てくるようになります。 magh-pr-viewはコマンドで、PR番号を指定してブラウザで開きます。

(defun magh-pr-view ()
  (interactive)
  (let ((pr-number (read-number "PR number: " (magh-pr-number-at-point))))
      (magh-git-call "pr" "view" "--web" (number-to-string pr-number))))

magh-pr-number-at-pointはとりあえずre-search-forwardを使う感じで、 magh-git-callはだいたい(apply #'process-file (find-executable "gh") nil t nil args)って感じです。 これでgh pr view --webコマンドを実行してPRをブラウザで開けるようになります。

次は ("m" "Merge" magh-pr-merge-transient) です。先程の magh-pr-view はコマンドでしたが magh-pr-merge-transient は別のtransient prefixです。

(transient-define-prefix magh-pr-merge-transient ()
  ["Arguments"
   ("-d" "Delete branch" "--delete-branch")]
  ["Actions"
   ("m" "Merge commit"     magh-pr-merge-commit)
   ("r" "Rebase and merge" magh-pr-merge-rebase)
   ("s" "Squash and merge" magh-pr-merge-squash)])

Argumentsではトグル可能なオプションを定義しています。 3つ目のロングオプションの部分を"--option="とすることで値をインタラクティブに聞くこともできます。 このオプションは (transient-args 'magh-pr-merge-transient) でリストとして取り出すことができます。

あとは"gh pr merge"を実行する関数を作ってやれば動きます。

(マージしたあとリストから消えて欲しいけど、すぐリフレッシュしても消えていないのでちょっと難しい…)

以上でだいたいやりたいことができました。

感想

transientを使ってみたのは初めてでしたが、非常に簡単にmagit風のツールを作ることができました。 個人的にこのghラッパーは少しずつ発展させていきたいと思っています。 楽観的には、man ghがあればあとはだいたい生成AIに任せられそうですね。

(ところで、わざわざghのラッパーを作らなくてもmagitにはリモートの操作を抽象化したforgeという拡張があるじゃん、と思われた方もいるかもしれません。が、forgeはGitHub以外のリモートも含めて汎用のAPIを使う前提であり機能に制限があること、認証情報の保存がEmacsの仕組みに乗っていてgh auth loginほど簡単でないことから見送っています。)

みなさんもtransientを使って便利な道具を作ってみてください。その際はtransient-showcaseが参考になると思います。


はてなアドベントカレンダー、明日12/24は id:SlashNephy さんの記事の予定です。お楽しみに!!!

Linuxの1Passwordでfprintd指紋認証

1PasswordにSSH鍵を登録してssh-agentを入れていると、git含むsshの操作で一定時間毎に1Passwordパスワードの入力を求められる。ここを指紋認証にする設定。

設定

前提

  • 1Passwordのssh-agentが有効になっている
  • fprintによる指紋認証が使える
    • この前提としてpolkitサービスが有効になっている

設定

  1. グラフィカルの認証エージェントをインストールする。 https://wiki.archlinux.org/title/Polkit#Authentication_agents

  2. (ない場合は) polkit-1 のPAM設定ファイルを作成する。

       cat /usr/lib/pam.d/polkit-1 | sudo tee /etc/pam.d/polkit-1 
    
  3. /etc/pam.d/polkit-1 にfprintdのエントリを追加

       auth       sufficient   pam_fprintd.so
       ...
    

これで動かない場合は、1に従ってpolkitのデフォルトルールをインストールする。

cp /usr/share/polkit-1/rules.d/50-default.rules /etc/polkit-1/rules.d/

参考

xremapで、CapsでEmacs風キーバインドにしつつCtrlを残す

Xmodmapでごまかしていたけど限界が来たので xremap を試す。

インストール

AURでX11用を入れる。

https://aur.archlinux.org/packages/xremap-x11-bin

GitHubのREADMEに従って起動できるようにしておく。

https://github.com/xremap/xremap

設定

ほしいリマップは、

  • ターミナルやEmacsでは Caps→Ctrlの変換。
  • FirefoxやSlackでは、CapsをCtrlとみなしてEmacs風のカーソル操作等を再現しつつ、CtrlはそのままCtrlとして使いたい。例えばFirefoxでは、Caps-Fは→、C-Fは検索となるようにしたい。

ので、次のように設定する。

modmap:
  - name: CapsToCtrl
    application:
      not: [firefox,Slack]
    remap:
      CapsLock: Ctrl_L

virtual_modifiers:
  - CapsLock

keymap:
  - name: Emacs
    application:
      only: [firefox,Slack]
    remap:
      # Cursor
      CapsLock-b: { with_mark: left }
      CapsLock-f: { with_mark: right }
      CapsLock-p: { with_mark: up }
      CapsLock-n: { with_mark: down }
      # Beginning/End of line
      CapsLock-a: { with_mark: home }
      CapsLock-e: { with_mark: end }
      # Newline
      CapsLock-m: enter
      CapsLock-o: [enter, left]
      # Delete
      CapsLock-d: [delete, { set_mark: false }]
      CapsLock-h: [backspace, { set_mark: false }]
      CapsLock-w: [C-x, { set_mark: false }]
      M-w: [C-c, { set_mark: false }]
      CapsLock-y: [C-v, { set_mark: false }]
      # Kill line
      CapsLock-k: [Shift-end, C-x, { set_mark: false }]
      # Undo
      CapsLock-slash: [C-z, { set_mark: false }]
      # Mark
      CapsLock-space: { set_mark: true }
      # SKK
      CapsLock-j: C-j
      CapsLock-g: C-g

感想

いかがでしたか?便利な世の中になったものですね。開発者に感謝。

i3内のFirefoxでスクロールがちらつく場合はコンポジタを入れる

i3は(おそらく)Xのコンポジタを含まず、そのままの状態だとFirefoxのスクロールがちらつく。 picom等のコンポジタを入れることで描画がスムーズになる。

picomの設定

picomをインストールしたら、デフォルトの設定をコピーする。

cp /etc/xdg/picom.conf $HOME/.config/picom/picom.conf

デフォルトの設定は余計なエフェクトが入っているのでオフにする。

shadow = false;
fading = false;
inactive-opacity = 1;
frame-opacity = 1;

あと wintypes まわりの余計な設定をコメントアウトする。

有効化

xinit を使っている場合は .xinitrcpicom -b を入れる。

参考