X に関する調査
linuxにおいてGUIを実現するにはX serverを立ててサーバと通信することでGUIの操作をすることが出来る.
X11
狭義では11番目のX serverのバージョンのことであるが長い間(from 1974)使われているので実質X serverの事を指していることもある.
Xlib
C言語においてX serverと通信するためのクライアントライブラリのこと.libX11とも呼ばれる.
このライブラリを使うことでX11のプロトコルを直接知らなくてもGUIプログラミングをすることが出来るようになった.(from 1985)
XCB
長年Xlibを使用し、他のプロトコル・インターフェース・ライブラリから学んだ後、X11用のC言語バインディングを定義するための2つ目の試みが行われました。それが「X11 C Binding」レイヤーのXCBです。XCBでは、プロトコルのクライアント・サーバーの性質を明確に設計しています。クライアントは、いつリクエストバッファをフラッシュするか、いつ結果を読むか、いつサーバーからの応答を待つかを決定する役割を担います。(from 2001)
Wayland
X11をsimpleにしてメンテナンス性を高めるために開発されている.
X11で動作するアプリケーションも動かす必要があるので一部サポートがあるらしい.(XWayland と呼ばれている)
Desktop Environment
Desktop Environmentとはwindow manager とか emailのアプリやブラウザなどをComponentとしてまとめたスターターパック.
window managerにはi3とかいろいろある.
DEのほとんどがX11に依存しておりwaylandがX11の代わりとしてあるが,waylandに対応しているDEはそんなにない.
i3が起動するまで
まずsystemdからはじまるので起動するserviceを探す.
systemdが確認するservicesのディレクトリの候補として3つぐらい見つかるはず.
/etc/systemd/system
/usr/lib/systemd/system
/lib/systemd/system
man 7 file-hierarchy によると /lib はlinuxとしてlegacyらしく, 確かに /lib は /usr/lib へのsymlinkになっている.
また /usrは基本的にユーザが変更していい場所ではなく(local rule),ユーザは/etc以下を編集するという常識がある.
pstree | less などでみると systmdがgdm3を起動しているのでgdmで検索すると
/usr/lib/systemd/system/gdm.service が見つかる.
gdmはdisplay managerの1つでログイン画面のUIとuserのauthenticationをおこない,
authが問題なければwindow managerなどにその後は任せる.
systemdの依存を調べると,
/lib/systemd/system/default.target
--ln--> /lib/systemd/system/graphical.target
--After--> /etc/systemd/system/display-manager.service
--ln--> /lib/systemd/system/gdm3.service
--ln--> /lib/systemd/system/gdm.service
の順に参照されてgdm3が起動される.
By default, GDM will install desktop files in the <share>/xsessions directory. GDM will search the following directories in this order to find desktop files: <etc>/X11/sessions/, <dmconfdir>/Sessions, <share>/xsessions, and <share>/gdm/BuiltInSessions.
実際に/usr/share/xsessions/i3.desktopがあった.
ただここには書いていないが/usr/share/wayland-sessions/も対象になっており,
おそらくwayland用のdesktop fileを置くと思われる.
/usr/share/wayland-sessions/ubuntu-wayland.desktop
続けて,
GDM desktop files support a GDM-specific extension, a key named "X-GDM-BypassXsession". If the key is not specified in a desktop file, the value defaults to "false". If this key is specified to be "true" in a desktop file, then GDM will launch the program specified by the desktop file "Exec" key directly when starting the user session. It will not run the program via the <etc>/gdm/Xsession script, which is the normal behavior.
/usr/share/xsessions/i3.desktopにX-GDM-BypassXsessionはなかったので/etc/gdm/Xsession i3が実行されている.
実際には/etc/gdmがなく,代わりに/etc/gdm3がある.
/usr/lib/gdm3/ 以下にgdm3に関する実行ファイルがある.
ログを見たい場合にはjournalctl _UID=$(id --user)で見ることが出来る.
To specify a default session for a user, update the user’s account service in the /var/lib/AccountsService/users/username file:
確かに usernameのファイルがあり,defaultのsessionとしてi3の設定が書かれてあった.
このXSession=i3は前述の /usr/share/xsessions/以下のi3.desktopを指定することを意味している.
code: desktop file
Session=
XSession=i3
Icon=/home/hogehoge/.face
SystemAccount=false
xkb=us
i3のとりせつ
xpropコマンドを実行して気になるwindowをクリックすれば
WM_CLASSやWM_NAMEなどのwindowのプロパティを見ることができる.
WM_CLASSはWM_CLASS(STRING) = "dictor", "dictor"のようになっており,
i3ではfirst partをinstanceといい,second partをclassとよぶ.
Swayのとりせつ
swayをinstallすると/usr/share/wayland-sessions/sway.desktopにデフォルトのファイルが作られる.
waylandはinterfaceだけ提供しておりinterfaceを実装しているのがcompositorと言われるもので
swayもwaylandのcompositorの1つである.wayland のreference実装としてwestonというcompositorもある.
swayは~/.config/sway/configを設定ファイルとして使う.
もしなければ~/.config/i3/configを勝手に使いやがるので注意.
xinputとかxclipとかx11に依存するようなものは全部使えなくなると思ったほうがよい.
MISC
xpropでwindowをクリックするとそのwindowのclass(WM_CLASS)が取得できる.