Sway WMを導入

偉大なる先駆者
まずデフォルトのコンフィグをコピーしてくる
なんだかi3よりコメントが沢山書いてあったり親切な印象
cp /etc/sway/config ~/.config/sway/config
自分はconfigファイルをdotfilesマネージャで管理したいのでシンボリックリンクを貼った
ディスプレイマネージャーはManjaroKDE付属のSDDMを使うが、これは上手く動作しているように見える
Swayの起動エントリは/usr/share/wayland-sessions/sway.desktop
に生成されている
これはsway
コマンドをexecさせるだけなので、仮想コンソールからそのまま起動しても問題ない
この記事によると環境変数はSwayの起動前に設定する必要がある&&KDEとSwayの環境を分離したいためsway
コマンドをwrapしたswayon
コマンドを新たに作成した
#!/bin/sh
export XDG_SESSION_TYPE=wayland
export XDG_CURRENT_DESKTOP=sway
export XDG_CURRENT_SESSION=sway
export LIBSEAT_BACKEND=logind
export QT_QPA_PLATFORM=wayland
# export GDK_DPI_SCALE=1.5
# export QT_SCALE_FACTOR=1.5
export MOZ_ENABLE_WAYLAND=1
export WINIT_UNIX_BACKEND=x11
exec sway
Tips
yay -Ql <package>
でパッケージが生成?するファイル名の一覧を取得できる
デフォルトの設定ファイルを探すのに便利
Wayland周りの設定はHyprlandのWikiも参考になりそうです

ディスプレイ
HiDPiディスプレイを使っているのでスケーリングはマスト
あいにくSwayは少数スケーリングを非推奨にしているが、全然普通に動く
XWaylandの表示がにじむらしいが、どうせターミナルとブラウザーしか使わないので気にしない
マルディスプレイ関連はwdisplays
コマンドを使うと都合が良い
よくある設定画面を使って画面配置を調整できる
ただし、設定の永続化はしてくれないのでヘルパーでも設定しておこう(#TODO)
configファイルでは次のように指定する
画面の名前はwdisplays
で調べるのが手っ取り早い
output <display> scale 1.25
arandrはXWaylandの画面を認識してしまうので注意

入力周り
Waylandはマウスやトラックパッド、キーボードをLibinputを用いてハンドリングしている...らしい
便利なのがトラックパッド(Thinkpadに付いてたsynaptics)で、macOSでもあるようなジェスチャによるページ遷移や慣性スクロールなどが利用できる(Firefoxで確認)
正直これだけでもWaylandを使う価値がある
設定はconfigファイルから出来るらしい 超便利
クリップボード
Waylandの設計はセキュリティのために、クリップボードの内容はコピー元のアプリケーションが終了すると削除される
neovim
neovimでクリップボードを使うには wl-clipboard
を導入する
キーボード
例の如く、Caps_lockとControlを入れ替える
Caps_lockは誰も幸せにしない
input * {
xkb_options "ctrl:swapcaps"
}
トラックポイント
アクセラレーションプロファイルをflatにする
トラックポイントは傾いただけ動くべきで加速度はいらない
input type:pointer {
accel_profile flat
pointer_accel 0.3
scroll_factor 0.5
}
トラックパッド
アクセラレーションプロファイルをadaptiveにする
macOSからの移行組なので、加速度は欲しい
正直移動量を算出する式?はmacOSの方が良くできている
確か変えられたと思うので調整してみるのもありかもしれない
input type:touchpad {
tap enabled
natural_scroll enabled
accel_profile adaptive
pointer_accel 0
scroll_factor 0.3
click_method none
}
項目 | 型 | 意味 |
---|---|---|
tap | enabled/disabled | (トラックパッド)タップtoクリックを有効にするか |
accel_profile | flat/adaptive | いわゆる加速度 |
pointer_ accel | -1< >1 | ポインターの速度 |
scroll_factor | (多分) -1< >1 | スクロールの速度 |
click_method | none/button_areas/clickfinger | トラックパッドの下部をタップした際の動作 |
ほかの設定項目は上記ページから探すとよい

Waylandとの互換性に起因する問題
Electron
VSCodeを小数スケーリング付きのSway上で実行すると表示がぼやけることがある
これは、VSCodeを画面に描画するElectronを動かすChromiumがXWayland上で実行されているためである
一時しか使わないアプリケーションであればこのままで問題ないが、VSCodeのような日常的に使うアプリケーションでは我慢ならないので、修正する必要がある
コンソールから起動する際はcode
コマンドに--ozone-platform-hint=auto
を付けるとよい
その他の場合は後ほど追記する
自分はVimを使うのでどうでもよい
Electron全般に対する設定として、.config/electron-flags.conf
を使う方法も存在する(要検証)
Chrome
Linuxを使うのならFirefoxを利用したいところだが、Google Chromeを使う場合は次のコマンドで起動させると良い
これによりozoneがWaylandネイティブで起動し、タッチパッドジェスチャによるページ遷移が可能になる
chrome://flagsで永続化できる(要検証)
google-chrome-stable --ozone-platform-hint=auto --enable-features=TouchpadOverscrollHistoryNavigation
手元ではChromeでfcitx5が使えない
2023/02/21追記
--gtk-version=4をつけると動くようになるそうです(ならない場合もあるなぜ)
soracatさんありがとうございます!
設定が必要そうな雰囲気がする
Firefox
export MOZ_ENABLE_WAYLAND=1

org.freedesktop.secrets
しーくれっとすとあ?を設定する
今回はKDEをサブ環境に持っているので、KDE Walletsを使う
(gnome-keyringでもいいらしい)
exec /usr/lib/pam_kwallet_init

音量のコントロール
ManjaroLinuxは標準でPulseAudioを使う
Swayからはpamixer
経由で音量をコントロールする
予めPATHに適当なコマンドを用意しておく
このコマンドでwobを使うと、ミュートにした際バーが赤色になる
便利なのでおすすめ
#!/bin/sh
ISMUTE=`pamixer --get-mute | awk '{if($0=="true"){print 1}else{print 0}}'`
if [ $ISMUTE -eq "1" ]; then
pactl get-sink-volume @DEFAULT_SINK@ | awk 'NR==1{print 100+substr($5, 1, length($5)-1)}'
else
pactl get-sink-volume @DEFAULT_SINK@ | awk 'NR==1{print substr($5, 1, length($5)-1)}'
fi
# 音量調整
bindsym XF86AudioRaiseVolume exec pamixer -i 5 && nowvol > $WOBSOCK
bindsym XF86AudioLowerVolume exec pamixer -d 5 && nowvol > $WOBSOCK
bindsym XF86AudioMute exec pamixer -t && nowvol > $WOBSOCK
ところでThinkPadのキーボードにはMuteの状態を示すインジケーターが付いているが、これはきちんと動作した
これは誰が制御しているのだろう
インジケーターはwob
(AUR)で表示できる
set $WOBSOCK $XDG_RUNTIME_DIR/wob.sock
exec rm -f $WOBSOCK && mkfifo $WOBSOCK && tail -f $WOBSOCK | wob
ソケットを作って、
bindsym
の後ろに
pactl get-sink-volume @DEFAULT_SINK@ | awk 'NR==1{print substr($5, 1, length($5)-1)} > $WOBSOCK
でも付けておくとよい
現状音量が限界突破するので注意 pamixerを使えばOK
出力先の変更はAlsamixerから弄ればいいのかな?

輝度のコントロール
/sys/class/backlight/<device>/brightness
に値を書き込むことで明るさを調整できるが、面倒なのでラッパーコマンドであるlight
パッケージを使用する
brightnessへのアクセスには管理者権限が必要だが、ログインしているユーザーをvideo
グループに追加すると一般ユーザでもアクセス出来るようになる
bindsym XF86MonBrightnessUp exec light -A 10
bindsym XF86MonBrightnessDown exec light -U 10
wobを使うなら、
light | sed 's/\..*//' > $WOBSOCK
とでも書いておくとよろし

画面共有
Firefoxが画面を認識するかチェックする
キーワード: WebRTC Screen Sharing
面倒なので後回しで

rootでGUIアプリを開く
Gtk-WARNING **: 22:38:14.297: cannot open display:
このエラーはsudo -Eで防げる
timeshift
btrfsで高速スナップショット
.desktopから起動されるのはtimeshift-launcherだがうまく起動しないので、ターミナルから
sudo -E timeshift-gtk
でひとまず起動できる
-E
フラグはユーザーの環境変数を引き継ぐオプション
そのままだとtimeshift側がディスプレイを見付けられないらしい

Firefox
Vixen + TreeStyleTab + UserCSSでSwayに最適化
これはmacOSのスクリーンショット
body {
background-image: url("./img/background.gif");
}
H1 {
color: white;
font-size: large;
background: #666666;
padding-top: 2px;
border-top: #cccccc 2px solid;
border-bottom: #333333 2px solid;
padding-bottom: 2px;
padding-left: 1em;
border-left: #cccccc 2px solid;
border-right: #333333 2px solid;
padding-right: 2px;
}
H2 {
color: white;
font-size: medium;
background: #666666;
padding-top: 2px;
border-top: #cccccc 2px solid;
border-bottom: #333333 2px solid;
padding-bottom: 2px;
padding-left: 1em;
border-left: #cccccc 2px solid;
border-right: #333333 2px solid;
padding-right: 2px;
margin-right: 30%;
}
DIV.note {
background: #ffdddd;
border: outset thin #ffcccc;
border-top: 0px;
border-left: 0px;
}
H2.note {
font-size: medium;
background: #886666;
padding-top: 2px;
border-top: #ddcccc 2px solid;
border-bottom: #443333 2px solid;
padding-bottom: 2px;
padding-left: 1em;
border-left: #ddcccc 2px solid;
border-right: #443333 2px solid;
padding-right: 2px;
margin-right: 30%;
}
table {
background-color: #FFFFFF;
}

Wofi
Xorgでいうところのrofi
Alfredやspotlightみたいなやつ...らしい
yay -S wofi
ひとまず、dmenuの代替として動作させる
set $menu dmenu_path | wofi -d | xargs swaymsg exec --

フォント
日本人なので中華フォントは避けたい
まずシステム全体に適用するフォントを設定する
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>Noto Serif</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Sans</family>
<family>Noto Sans CJK JP</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Noto Sans Mono CJK JP</family>
</prefer>
</alias>
</fontconfig>
本当はヒラギノフォントを使いたいが、コンフィグの可搬性が低下するのでNotoフォントで妥協
また、ユーザー単位ではフォントは~/.fonts
にインストールする
システムに認識されているかどうかはfc-list
コマンドで確かめる
fc-list | grep $USER | sort | less
font pango:<name> 8

Waybar
そろそろオシャレなバーが欲しいところ
yay -S waybar
bar {
swaybar_command waybar
}
デフォルトのbarを消し忘れないこと
デフォルトの設定は/etc/xdg/waybar
にある

テーマ
nwg-look
swayon
で定義した
デファルトでは、等幅フォントが変なものになっているので元に戻す
ターミナルがおかしくなる (ManjaroのデフォはNerd patched Hack)
カーソル
Waylandのカオスがそこにある
Adwairaに合わせたのだが、Waybarに入ると小さくなる
なんやねん

電源管理
Mac移行民からすると、サスペンド時に電源が持たなすぎてストレスがマッハ
tlp
をインストールする(systemctlから有効化することを忘れないこと)
また、CPU周波数を制御するためにcpupower-gui
を導入した
が、うまくうごかないので面倒になってやめた

無線
KDEに付属してきたツールをそのまま利用した
コンソールからも起動できる
特に設定はいらなかった
KDE以外の環境であれば、nmtui
が便利

起動直後画面上部が虹色になる
XOrgでプチフリが起きる
modesettingを使うよう明示するもしかしたら

Hyperlandいいらしいっすよ

Stacer
↑色々クリーニングしてくれる便利ツール