GNU/Linux

DBusのEmacs Lispバインディング

Emacs の scratch バッファで DBus のメソッドを叩いたりできるので便利。たぶん。 DBus 便利じゃんね。(分かってない) 準備 require する。M-x describe-function すると勝手に内部で require するようなので 忘れていたが、当然といえば当然。 (require 'dbus) Introspection プロパティとかインターフェースを眺めるやつ。 GNOME Shell のスクリーンショットのインターフェースを眺めてみる。 XML でなくて S 式で表示される。 (dbus-introspect-xml :session "org.gnome.Shell" "/org/gnome/Shell/Screenshot") メソッドを叩く 適当に introspection で見えた通りに引数を詰め込んでウィンドウのスクリーンショットを撮ってみる。 コマンドラインの dbus-send だと型の指定が面倒だが(まあ 1 と "1" の区別つかないのでそれはそう) Emacs だと Lisp での型が適当に DBus の型にマッピングされていて割と楽。 あと引数が一致しなかったりしたら Emacs Lisp の例外

ArchLinux のフォント設定

なんかおかしいな〜と思いつつ何もやってなかった。 Noto の CJK フォントはインストールするだけじゃなくて自分で symbolic link 作ってやる必要あり。 $ ln -s /etc/fonts/conf.avail/70-noto-cjk.conf /etc/fonts/conf.d/. これをやっていなかったので,あらゆるフォントが Noto Sans CJK JP で描画されていて, ソースコード部分に web font 使ってないサイト(つまり自分のブログ)のソースコードとかが死んでた。

envコマンド

UNIX のコマンドで(本来の)機能が誤解されがちなコマンドとして cat や touch が有名な 気がするが,env もそのひとつだと思う。env の使われ方としては,単独で実行して設定されている 環境変数を見たり,shebang で bash (やその他 executable)のパスをハードコードするのを避けるために #!/usr/bin/env bash といった感じで使われるのが多分ほとんどのような気がする。 env の本来(?)の機能は環境変数をいじってからコマンドを実行するといったところだ。 なので Bash から実行するときは env なしで FOO=bar command といった感じで実行しているのをこういった書き方が使えない環境で実現したいと思ったときに env FOO=bar command というコマンドで実行すると等価なことができるということだ

Waylandで動いているかXWaylandで動いているか見分ける

小数単位でのスケーリングをしていたら XWayland のアプリケーションは ぼやけているので自明な感じはあるが,面白い(かつ見た目が良い?)見分け方を 見つけたので。 xeyes を起動する。 マウスを動かしてみる。 簡単ですね! マウスをいろんなウィンドウの上に動かしてみて目が動くウィンドウは XWayland, 目が動かないウィンドウは Wayland で動いている。 参考 https://medium.com/@bugaevc/how-to-easily-determine-if-an-app-runs-on-xwayland-or-on-wayland-natively-8191b506ab9a xeyes のソースコード: https://gitlab.freedesktop.org/xorg/app/xeyes

Firefox on Wayland

XWayland だとスケーリングしたときにぼやける問題があるので,Wayland を使うようにする。 今の段階だと MOZ_ENABLE_WAYLAND=1 という環境変数があった場合は Wayland を使う ようになっている。毎回端末から実行すれば当然できるが,それは面倒なのでアイコンをクリックしたときでも Wayland を使う設定で普通に起動するようにしたい。 同じ方法で Thunderbird にも Wayland を使わせることができる。 方法1: .bashrc とかに書く 一番簡単。でも僕はむやみに環境変数足したくない派(全然関係ないプロセスからアプリケーション固有の 設定が見えるのが無駄な感じがする)なのでこの方法はあまり好きじゃない。 方法2: デスクトップエントリーをいじる /usr/share/applications/firefox.desktop を ~/.local/share/applications/ に コピーしてきて Exec の行のコマンドの先頭に env MOZ_ENABLE_WAYLAND=1 を追加す

iBusのアップデートでGNOMEのIMEの問題が直った

GitHub のプロジェクトのページを見ている感じではリリースは夏ごろかなと思っていたのだが, 今日 ArchLinux でアップデートが来た. Wayland でインプットメソッドが使えない問題も直ったので,Xorg から Wayland に切り替えることができた. Wayland に切り替えて何が嬉しいかというと,割と簡単に小数単位のスケーリングができることだ. 先日,ThinkPad X1 Carbon が届いたのだが,今回はちゃんとフルハイの解像度のを選んだので 画面の表示が小さすぎて辟易していた.それで今日のアップデートで大きく表示できるようになったので 快適になった. ただ,この小数単位でのスケーリングは問題もはらんでいるようで,GNOME のアプリ以外の多くのアプリは の解像度が低いままで拡

Linux 環境で適当にサンドボックスする

入れる. $ sudo pacman -Ss firejail 再起動する. 試しに Bash を実行する. $ firejail bash 一見普通に Bash が起動したように見えるが, ps aux とかやってみると普通じゃないことが すぐに分かって,他のプロセスが見えない. $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND kofu 1 1.5 0.0 4952 2612 pts/2 S 22:58 0:00 firejail bash kofu 3 1.5 0.0 9368 4884 pts/2 S 22:58 0:00 bash kofu 5 0.0 0.0 9844 3084 pts/2 R+ 22:58 0:00 ps aux でもこれだとホームディレクトリへの読み書きとかは普通にできる. それが嫌だったら --private をつけてやると,何もない tmpfs がホームディレクトリにマウントされる. おしまい.

GNOME Shell 3.36 で IBus が使えない対処

IBus が自動起動しない(というか起動はしてるけど使えない)のは Wayland のときだけらしい。 たしかに GNOME on Xorg のセッションにすると問題なく IBus が GNOME Shell から 使えるようになっている。 この原因は,Unix ソケットを作るときに Xorg のときは DISPLAY 環境変数を見て, Wayland のときは WAYLAND_DISPLAY 環境変数を見ないといけないところを, IBus はどちらの場合も DISPLAY を見ているというところにあるらしい。 今まで Wayland でも動いていたということは GNOME Shell の実装が非標準だった ということだろうか(よく分からない)。 https://github.com/ibus/ibus/pull/2195 この PR で直っているみたいなので IBus の次のリリースには GNOME Shell on Wayland でも IBus が動くようになっているはず。 それまでは Wayland じゃなくて Xorg 使うか……。 そういえば ibus-daemon -drx とすれば wayland でも IBus が使えるようにな

SVG でターミナルを録画できる termtosvg

いろんなワードで pacman -Ss してみて眺めていたら,termtosvg というやつを 見つけたので試してみた。 結論:すごい。ただ alternative screen buffer ができないみたい。 ソース見たら CSS で表示位置をずらしてアニメーションしているように見せているっぽい? よくわからぬ。

rootfs に NTFS を使う?

しかも ArchLinux でやってる。エモい。 https://github.com/nikp123/ntfs-rootfs/wiki 正気か?POSIX のパーミッションをサポートしてないので無理な気がしたけど 非公式のサポートがあるらしい。誰得なんだろ。 安定しているの? シャットダウンできないことを除けばとても安定している。 🤔 パーミッション周りをゴニョゴニョやってるせいでパフォーマンスは悪いらしい。