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
↑色々クリーニングしてくれる便利ツール