Sway on Ubuntu  調査続き 最低限の設定まで 1/2

# Sway on Ubuntu 21.10の続き
昨日の続き。
とりあえずターミナルまで起動しましたが、実用に耐えるところまで必要なツールを揃えていきます。

やるべきことは以下でしょうか。

- ディスプレイの設定方法の確認（マルチディスプレイ）
- menuの設定($mod + dで出すやつ)
- ブラウザの導入
- 日本語入力の設定
- スピーカーの設定
- ログイン（ディスプレイマネージャ）の設定
- VirtualBoxの導入と設定

順番に調べていきます。

# 1. ディスプレイ設定
## wdisplay
現状のi3ではxrandrをi3設定で呼び出す方法を取ってましたが、、xがつくやつは軒並みだめなんですね。。
軽くググってヒットしたwdisplaysとやらを使ってみます。

```
# apt install wdisplays

$ wdisplays
```

![2021-10-23_15:51:02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587269/2e812114-8ffe-5736-76cd-4a328d18f1c4.png)

とりあえず設定はできます。
左上に謎の青線がでるのはなんだろう、、ディスプレイ番号（１）てことかな。
あと、再起動する度に解像度がもとに戻ってしまいます。
さらにググったらそういうものらしく、swayのconfigに設定を入れておく方法をとるとか。

こんな。

```
$ echo "output Virtual-1 2560x1600" >> .config/sway/config
```

コマンドラインで設定を変える場合はswaymsgというコマンドを使うらしく。
複数ディスプレイを並べて、位置調整の設定をちょこちょこやるときに使うことなるのかな。

ではあらためて複数ディスプレイで、、、とおもったのですが。

## 脱線 VirtualBoxのマルチディスプレイが使えない！！
現状はVirtualBox環境で試してみているのですが、仮想ディスプレイを複数付与するにはVBoxLinuxAdditionsが必要なようですので導入を、、と思ったのですが、失敗。

まず、パッケージがたりてないみたいで、コマンドが見つからんと言われてStop。
いれましょう。

```
# apt install bzip2 flex bison make gcc perl
# ./VBoxLinuxAdditions.run
```

で、、だめ。
/var/log/vboxadd-setup.logを確認したところ、以下の通り。

```
# cat /var/log/vboxadd-setup.log
Building the main Guest Additions module for kernel 5.13.0-20-generic.
Error building the module.  Build output follows.
make V=1 CONFIG_MODULE_SIG= -C /lib/modules/5.13.0-20-generic/build SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j1 modules
make -f ./scripts/Makefile.build obj=arch/x86/entry/syscalls all
make[2]: *** No rule to make target 'arch/x86/entry/syscalls/syscall_32.tbl', needed by 'arch/x86/include/generated/uapi/asm/unistd_32.h'.  Stop.
make[1]: *** [arch/x86/Makefile:231: archheaders] Error 2
make: *** [/tmp/vbox.0/Makefile.include.footer:106: vboxguest] Error 2
Could not find the X.Org or XFree86 Window System, skipping.
```

試しに普通にUbuntu Desktop 21.10や20.04用意して試したのですが、そちらでも同様のエラー自体は出るみたいですね。
ただし、X.orgをちゃんと導入している環境だとエラー自体は同じように出るのだけれど、マルチディスプレイを受け付けてくれるようにはなるようです。
VBoxAdditionsがピュアなWaylandだとうまく動かんのかな、、
今回はX.orgの導入無しで組むのを目的としていますので、マルチディスプレイの検証は一旦諦めます。

# 2.menuの設定
i3同様dmenuを使う、、と思ってたのですが、$mod + dでいつものメニューが出てきません。
sway起動時にsway -d > ./sway.log >&1 とする方法でログを出してみていたのですが、xwaylandがない、とエラーが出ます。
軽くググるとdmenuはwayland対応していないらしく、細工が必要なそうです。。

wofiであればwaylandのみで動くのですが、、、、デザイン嫌いなんだよな、、
dmenuのさり気なく丈夫に表示されるのが好きだったのに、、
と思ってたら、そう考える人が当然いたみたいで。
https://luxagraf.net/src/guide-to-switching-i3-to-sway

Ubuntuでalacrittyはうまく導入できなかったので、ディフォルトのfootを使う前提で以下のように設定入れてみます。

```
set $menu foot -T menu bash -c 'compgen -c | sort -u | fzf | xargs swaymsg exec --'
for_window [app_id="foot" title="menu"] {
  floating enable
  resize set width 25 ppt height 20 ppt
  move position 0 px 0 px
}
```

まず１行目で$mod + dで呼び出されるコマンドを定義しています。
footで窓を開いて、その中でbashを実施、
cpmpgen -cで打てるコマンドのリストを出して、ソートして、fzfというキーワードうつと選択肢が狭まってってくれるツールを起動します。
fzfは最後に候補を選ぶと、選んだ候補を標準出力して終了、、なのかな。
それを最後にsysmsg execにパイプで渡して実行させる、と。
bashに渡しても末尾に&をつけても動くようには見えるけど、不都合があるんでしょうね。
そこは機会があったらまた調べます。

で、２行目は、$menuで開いたウィンドウのサイズと位置の指定です。
指定はウィンドウのapp_idとやらやTitleとやらなどで指定するのですが、これらはウィンドウ内のアプリの起動オプションで推定したりできなかったりするらしいです。
footは-Tオプションでタイトル指定できるので、$menuの時点で"menu"というわかりやすいタイトルをつけて、それで指定します。
まかり間違って別のwindowでfoot開くときにmenuてタイトルつけると、それも左上に表示されます。
なんかちょっと怖さを感じる仕組みですね。。
中身は、floating(ほかのWindowsの上に表示してOK)の有効化、サイズの絞り込み、開く位置の指定(左上)です。

動かすとこんな。
![2021-10-27_22:31:42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587269/d262a6e0-a42a-ce1f-d3d4-d3fb34452950.png)

うーん。。。
dmenuの使い方に慣れてると縦長に出てくるのはちょっと気持ち悪いっちゃ悪いなぁ。。
dmenuを使う場合はxwaylandを導入すればOKではあります。

22.04の時点でうまい解決策ができているといいのですが、現状どうするかは保留ですね。。
他にxwayland必須のものがある場合はdmenu、そうならずにすめばfzf方式か、同様の動作で横長に表示出すスクリプトを自分でつくるかかなぁ。。

# 3.ブラウザの導入
とりあえず、まずはfirefoxを入れます、、、と思ったのですが、、

```
$apt show firefox
Package: firefox
Version: 93.0+build1-0ubuntu3
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Mozilla Team <ubuntu-mozillateam@lists.ubuntu.com>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 226 MB
Provides: gnome-www-browser, iceweasel, www-browser
Depends: lsb-release, libatk1.0-0 (>= 1.12.4), libc6 (>= 2.34), libcairo-gobject2 (>= 1.10.0), libcairo2 (>= 1.10.0), libdbus-1-3 (>= 1.9.14), libdbus-glib-1-2 (>= 0.78), libfontconfig1 (>= 2.12.6), libfreetype6 (>= 2.10.1), libgcc-s1 (>= 3.3), libgdk-pixbuf-2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.42), libgtk-3-0 (>= 3.14), libharfbuzz0b (>= 0.6.0), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), libstdc++6 (>= 11), libx11-6, libx11-xcb1 (>= 2:1.7.2), libxcb-shm0, libxcb1, libxcomposite1 (>= 1:0.4.5), libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxi6, libxrender1
Recommends: xul-ext-ubufox, libcanberra0, libdbusmenu-glib4, libdbusmenu-gtk3-4
Suggests: fonts-lyx
Replaces: kubuntu-firefox-installer
Task: kubuntu-desktop, kubuntu-full, xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop, ubuntukylin-desktop, ubuntu-mate-core, ubuntu-mate-desktop, ubuntu-budgie-desktop, ubuntu-budgie-desktop-raspi
Xul-Appid: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
Download-Size: 60.6 MB
APT-Sources: http://jp.archive.ubuntu.com/ubuntu impish/main amd64 Packages
Description: Safe and easy web browser from Mozilla
 Firefox delivers safe, easy web browsing. A familiar user interface,
 enhanced security features including protection from online identity theft,
 and integrated search let you get the most out of the web.

```

Dependsにlibx11がいる!?
waylandでも動くのだそうですが、切り分けきれてないのですかね。。
https://wiki.archlinux.jp/index.php/Firefox#Wayland
。。。あらためてサーバのパッケージ見たら、ubuntu serverのminimumインストールの時点ですでにlibx11はいってるのですね。
ならもういいか。。
インストールで。

```
# apt install --no-install-recommends firefox
```

日本語が表示できないので少し追加。フォント。
設定云々以前に、日本語文字列のデータが何も入ってないので、何か入れないと常に文字化けし続けます。
21.10の推奨などはよくわからなかったので、ググると18.04でよく出てくるnotoというものを入れておきます。

```
# apt install fonts-noto
```

fc-listを叩くと、説明に”JP”とあるフォントが追加されています。
これで日本語がちゃんと表示されるようになります。

## 脱線 Chromeは？
じゃぁ、chromeはというと、、

```
$ apt show chromium-browser
Package: chromium-browser
Version: 1:85.0.4183.83-0ubuntu2
Priority: optional
Section: universe/web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 164 kB
Provides: gnome-www-browser, www-browser, x-www-browser
Pre-Depends: debconf, snapd
Depends: debconf (>= 0.5) | debconf-2.0
Homepage: https://chromium.googlesource.com/chromium/src/
Download-Size: 48.4 kB
APT-Sources: http://jp.archive.ubuntu.com/ubuntu impish/universe amd64 Packages
Description: Transitional package - chromium-browser -> chromium snap
 This is a transitional dummy package. It can safely be removed.
 .
 chromium-browser is now replaced by the chromium snap.
```

snap?ううん、、、snapは使い慣れていないのでちょっと気持ちが悪いのですが、、
まぁいれますか。。
で。

```
$ chromium-browser
/usr/bin/chromium-browser; 12: xdg-settings: not found
Trace/Breakpoint trap (core dumped)
```

えぇぇ、、。
試しにxdg-utils入れても、Trace/XXXが出てしまいます。

方針を変えて、Chromeのサイトからdeb持ってきてみましょうか。

```
# dpkg -i ./google-chrome-stable_currentXXX
```

。。。パッケージ色々足りないって。
色々入れますか。。

```
# apt install --no-install-recommends fonts-liberation libnspr4  libnss3 xdg-utils
# dpkg -i ./google-chrome-stable_currentXXX
```

で。

```
$ google-chrome
```

open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)という表示が。
同じく、scaling_max-freqもないとのこと。
いくつかググって、、
https://pychao.com/2021/01/04/using-google-chrome-chromium-with-native-wayland-backend-in-arch-linux/

Native Waylandで使う場合、引数が必要なそうです。

```
$ google-chrome-stable --enable-features=UseOzonePlatform --ozone-platform=wayland
```

起動をsway configでキーバインドに紐付けておいて、上記のオプションをディフォで入れるようにしてやれば実用には耐えますが。。
ここらへんは22.04が出るまでにこなれてるといいなぁ。。


# 4.日本語入力
fcitx + mozc、、と思ったのですが、一応21.10の標準を調べてみます。

https://discourse.ubuntu.com/t/impish-indri-release-notes/21951?_ga=2.112084998.364655813.1635560157-285153696.1634080374
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0689

ibusがwayland上で動作がよろしくないというので、fcitxは継続で。
あと、、fcitx”5”?

入れてみますか。

 ```
# apt install --no-install-recommends fcitx5-mozc
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  dictionaries-common emacsen-common fcitx-mozc-data fcitx5 fcitx5-data fcitx5-modules hunspell-en-us
  libabsl20200923 libaspell15 libatomic1 libenchant-2-2 libfcitx5config6 libfcitx5core7 libfcitx5utils2
  libgtk2.0-0 libgtk2.0-common libhunspell-1.7-0 libprotobuf23 libtext-iconv-perl libxcb-ewmh2 libxcb-randr0
  libxcb-util1 libxcb-xinerama0 mozc-data mozc-server
Suggested packages:
  ispell | aspell | hunspell wordlist fcitx5-chinese-addons fcitx5-frontend-gtk2 kde-config-fcitx5 hunspell
  openoffice.org-hunspell | openoffice.org-core aspell libenchant-2-voikko gvfs
Recommended packages:
  fcitx5-config-qt fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 im-config fcitx5-module-emoji
  fcitx5-module-quickphrase fcitx5-module-wayland fcitx5-module-xorg mozc-utils-gui aspell-en
  | aspell-dictionary | aspell6a-dictionary enchant-2 libgail-common libgtk2.0-bin
The following NEW packages will be installed:
  dictionaries-common emacsen-common fcitx-mozc-data fcitx5 fcitx5-data fcitx5-modules fcitx5-mozc
  hunspell-en-us libabsl20200923 libaspell15 libatomic1 libenchant-2-2 libfcitx5config6 libfcitx5core7
  libfcitx5utils2 libgtk2.0-0 libgtk2.0-common libhunspell-1.7-0 libprotobuf23 libtext-iconv-perl libxcb-ewmh2
  libxcb-randr0 libxcb-util1 libxcb-xinerama0 mozc-data mozc-server
0 upgraded, 26 newly installed, 0 to remove and 0 not upgraded.
Need to get 19.9 MB of archives.
After this operation, 46.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
```

で、fcxit5-configtoolを起動、、、できない。
fcitx5-config-qtが見つからない、と。
いれます。
ただし、追加で以下も入れています。

qtwayland5。
見るからにqtをwaylandで動かすのに必要そうな名称です。
Recomendsの位置づけなのですが、実際試したら、これ入れてないとwaylandプラグインがないというエラーを出します。。

mozc-utils-gui。
これなくてもfcitx5-configtoolの起動とmozcの有効化まではできるのですが、mozcキーバインドの設定ができないです。

```
# apt install --no-install-recommends fcitx5-config-qt qtwayland5 mozc-utils-gui
```

これで、一通り設定が入るようになります。

```
$ fcxitx5-configtool
```

。。。が、設定はできるのですが、動きません。。
--no-install-recommends外してみたりとガチャガチャいじってたのですが、以下の環境変数をいれて、いくつかパッケージを追加することになりました。

```
# cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

# apt install fcitx5-module-wayland fcitx5-module-xorg fcitx5-frontend-gtk3
``` 

ここらはちゃんと理解しきれていません。
22.04のときにあらためて調べないとな。。

あ、起動時にfcitx5が自動起動するようにしないといけませんね。
正しい方法が見つからなかったので、とりあえず力技で、、

```
$ echo "exec fcitx5" >> ~/.config/sway/config
```

# とりあえず
今日はここまで。


# Tips
設定を調べる関係で学んだTipsです。

## swayの終了
コマンドだと swaymsg exit、キーバインドだと$mod + Shift + e。
これまではshutdownコマンド叩く終了しかしてなかったので、今回始めて知りました。。

## swaymsgとsway
正しく理解できてるか自信ないのですが、、
sway関連の設定を実施するのがswayコマンド、swayコマンドをラッピングしてInput(キーボードやマウス)の現状やOutput(ディスプレイ)の現状調べたりする機能を追加したのがswaymsgコマンド、、ということでしょうか。

## Windowとapp_id
dmenuの部分で、コマンド検索用の小窓を開く際に、Windowを指定してサイズ小さくして左上に表示する、ということをします。
このサイズ指定と位置指定はfor_windowというswayコマンドで指定するのですが、その際、対象のWindowをapp_idやTitleという情報で指定します。
で、これらの情報は、アプリごとに決め打ちの値になっていたり、アプリを起動するときにオプションで指定したりすることになります。
例えば上記のalacrittyを使う例だと、alacrittyが起動時にclassifier情報をオプションで指定できるので、for_windowではclassifierで指定して小窓化しています。
footだとTitleだけは-Tオプションで指定できるので、titleと決め打ちのapp_idで指定します。

一応柔軟にapp_idに任意の値を入れる方法がないかなぁと調べてみたのですが、結論としてはそういう方法は見つけられませんでした。
swaymsg経由で開いた場合にオプションで指定できたり、、とかおもったのですが、そういうものは見つけられず。
ここは対象のアプリに応じてうまくやってくしかなさそうですね。

## コマンドラインでfor_windowをいじると、、
動作見るためにsway for_window ...というようにコマンドラインから入力していたのですが、対象のfootをapp_id + titleで指定しているのですが、タイトルが全然違うfootに中途半端に設定が適用されてfloat化したりサイズが変わったりと、へんてこな動作がちょこちょこありました。
最終的にconfigに設定して起動時に読み込ませるようにしたら安定したのですが、、何だったのだろうか。
流石にめんどくさいのでこれ以上の深追いはしてません。