🎮

EndeavourOS i3-WMを普段使いする手順(i3wmの設定)

2022/06/22に公開
1

https://zenn.dev/kako_jun/articles/e49ef7603efabb
https://zenn.dev/kako_jun/articles/0d6095719666f5
の続きです。


こういう作業用デスクトップを作ります。


前回までで、OSのインストールが終わりました。

使うようになってから知ったのですが
https://distrowatch.com/
によれば
EndeavourOSって、いま人気2位なのですね……

日本語での情報は少ないようですが
今まで使った中で1番使いやすいので、知られてないだけだと思いました。


次は初期設定です。

初期設定は

  1. i3wmだからこそ必要な設定
  2. i3wmでなくても、Arch Linuxならば当たり前にする設定
  3. Arch Linuxでなくても、Linuxならば当たり前にする設定

に分かれます。

実際は同時並行にやったのですが
振り返りなので、上記3つを分けて説明してみます。

1. i3wmだからこそ必要な設定

https://wiki.archlinux.jp/index.php/I3
タイル型ウィンドウマネージャの説明はネットに多くあるし

https://discovery.endeavouros.com/window-tiling-managers/i3-wm/2021/03/
など、公式サイトもあるので
網羅的には説明しません。

つまづいたけど、(英語サイトで)調べたら解決した!
というノウハウを、ほかの人がショートカットできるように羅列しようと思います。

  • 日本語表示
  • 日本語入力
  • デフォルトブラウザをChromeにするには?
  • ブラウザのアイコンをFirefoxから変更するには?
  • Widnowsキー + L を押して操作不能になった場合は?
  • タスクバーの時計の秒部分を無くすには?
  • ターミナルを半透明にするには?
  • VSCodeなどを表示するワークスペースを固定するには?
  • キーボードのファンクションキーで輝度を変更するには?
  • フタを閉じたときや無操作時間で、自動的にスリープさせるには?
  • ファイルを検索するには?
  • クリップボード履歴を使うには?
  • Bluetoothを設定するには?
  • ログオフ時の大音量BEEP音を消すには?
  • 壁紙を変更するには?
  • fishでフォント色を反映させるには?
  • これさえ覚えておけば何とかなる操作方法

まず
ThinkPad X13 Gen 2 (AMD)へのEndeavourOS i3-WMのインストールは

インストール直後の状態でも、けっこう問題なく動きました。

認識しなかったデバイスは無し。
マウスを挿したら、挿した直後から動く。

ただ、HDMIでマルチモニターにしても、再起動するまでは認識しませんでした。
これはHDMIを抜いた場合も同様でした。

あと、「直」とかのフォントが変です。
中華フォントってやつです。

タイル型ウィンドウマネージャって、ターミナルが半透明って印象がありましたが
デフォルトでは不透明でした。

キーボードのファンクションキーにある
音量+/-は動作しましたが
輝度+/-は、押しても何も起きませんでした。

これらを、1つ1つ直していきます。

日本語表示

中華フォントを直すには

2022年のいまは
noto-fontsnoto-fonts-cjk
を入れればいいと思います。

Adobeの源ノ角ゴシックもほぼ同じだそうですが
ごめんね……金沢なのでNotoって響きが好きなの……

noto-fonts-emoji も入れました。
noto-fonts-extra は入れませんでした。

入れるには、sudo pacman -S 〇〇 ですが

私はPacmanなのかAURなのか、いちいち考えるのが面倒なので
まず yay コマンドを入れて
全部 yay -S 〇〇 で済ませてます。

sudo を打たなくても、打ったことになるのが楽!)

yay の入れ方は
git clone で入れる方法がよく紹介されてるし
公式の説明もそうなのだけど

sudo pacman -S yay でも普通に入っちゃったし
特に困る現象も起きてないので、そのまま使ってます。


これだけで、ファイラーでの表示は直りました。
デフォルトのファイラーは、Xfceと同じくThunarです。

EndeavourOS i3-WMでは、こういうパッケージたちは
基本的にXfce版と同じものが使われてるし

自分で追加する場合でも、なるべく xfce4- から始まるものを入れる文化のようです。

(間違って gnome- って付いてるパッケージを入れちゃうと、せっかく軽いOSなのに一気に1GBくらい食ってしまう)

ターミナルも、デフォルトではxfce-terminalが起動してます。
ターミナルのフォント変更は、右クリックメニューの「設定」から。

私は、Hackgen Console Regularを使ってます。
https://github.com/yuru7/HackGen

yay -S ttf-hackgen
でインストールできます。

yay で入れられないアプリはないの?
ってくらい、Arch最強だな……

日本語入力

fcitx-mozc を入れます。

GUIでの設定ツールも必要なので
fcitx-configtool も入れます。

それだけで、Ctrl + Spaceで日本語入力モードになりました。

タスクバーのアイコンから
単語登録したり、スキンをdarkに変えたりできます。

ターミナルやVSCodeで日本語入力した際に
ちゃんとインラインで変換候補が出てくれます。

このあたりの面倒な設定で、時間が無駄にならないのは嬉しいです。

デフォルトブラウザをChromeにするには?

デフォルトではFirefoxが選ばれてます。
タスクバー左下に表示されるワークスペース2のアイコンもFirefox。

タスクバー中央やや右に表示される、ブラウザ起動のためのアイコンもFirefoxです。
(これは画像でなくUnicodeの文字なのですが、色までちゃんとオレンジになってます)

私はChromeのデベロッパーツールに慣れてるので
デフォルトもChromeにしたかった。

yay -S google-chrome
でインストールできます。


設定変更は、i3wmの文化により、テキストの直接編集です。

私はNeoVimを使ってるので
nvim ~/.config/i3/config

変更する箇所は4つあります。

## App shortcuts
bindsym $mod+w exec /usr/bin/google-chrome-stable
# bind program to workspace and focus to them on startup:
assign [class="Xfce4-terminal"] $ws1
assign [class="(?i)google-chrome"] $ws2
# automatic set focus new window if it opens on another workspace then the current:
for_window [class=Xfce4-terminal] focus
for_window [class=(?i)google-chrome] focus
# Autostart apps as you like
exec --no-startup-id sleep 2 && xfce4-terminal
exec --no-startup-id sleep 7 && google-chrome-stable

バイナリ名は google-chrome-stable
クラス名は google-chrome なところが、ややこしいです。

ブラウザのアイコンをFirefoxから変更するには?

これでChromeが起動するものの
タスクバー上のアイコンは、Firefoxのままです。

これもChromeにしましょう。

i3wmの設定のメインは
~/.config/i3/config にありますが

タスクバー部分の設定は
nvim ~/.config/i3/i3blocks.conf でやります。

Firefoxのアイコンはタスクバー内なので、こっちのファイルです。



こういう箇所があります。

Firefoxのアイコンは、画像でなく
画像っぽいUnicodeの文字を表示してたわけです。

……ということは、おそらくFirefoxの隣くらいに
Chromeのアイコンを意味するUnicodeがあるはずですが
その文字コードが分かりません。

こんなの、よくあるHow Toだろうと思って検索したのですが
英語圏でもこのアイコンをChromeに変える解説は、見つかりませんでした。

うぅ……私以外にChromeは嫌われてるのか……?


仕方ないので、自分で調べた方法を紹介します。

文字コードを調べるには、「Character Map」というキーワードを思いつく必要がありました。
Character Mapを閲覧できるオンラインサービスもありましたが
検索ワードにchromeと打って調べることはできないようで

結局、gucharmapというツールをインストールして解決しました。

yay -S gucharmap

Noto Sans CJK JPを入れた状態で、gucharmapを起動して
フォントとして選びます。

そして、i3blocks.conf の中に最初からあったFirefoxのアイコン文字をクリップボードにコピーし
gucharmapにペーストして検索すると、その位置にジャンプできます。

あとは、その隣にあるChromeのアイコンをコピーし
i3blocks.conf に貼り付ければ、Firefoxから差し替えできます。

いちおう、ここにもそのUnicode文字を貼っておきます。

[browser]
full_text= 

やっぱり豆腐になっちゃいますね……

でも、テキストエディタへのコピー元として使えることは確認したので
ここからコピーして使ってください。

Widnowsキー + L を押して操作不能になった場合は?

Widnowsキー + L と表現してみましたが
$mod に該当するキーは人によりますし、L は正確には l です。(Shiftなし)

これが個人的に、EndeavourOS i3-WMのデフォルト状態最大の罠でした。

知らなきゃ何が起こったのかもわからず
操作が効かなくなり、電源ボタンを長押しするしかなくなる。
(画面はぼやけて、キーを打っても中央に緑の丸が表示されるだけ)

Verifying……Wrong!
というメッセージが表示されるので、ひょっとして……
と調べたらビンゴでした。

これはblur-lockというスクリーンロック用ツールが
キーボード・ショートカットが暴発して起動してたのですね。

つまり、ログインユーザーのパスワードを打ってEnterで解除されます。

余計な文字を打ってしまった場合は
Deleteキーを押しまくって0文字にすれば
そのことを案内するメッセージが表示され、やり直せます。


なぜ私の操作で、この $mod+l が暴発したかというと

i3wmでのウィンドウの選択切り替え操作として

bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

があることは知ってましたが
それを矢印キーでなく、Vimキーバインドに変えるよう紹介してる記事もあったのです。

そして

bindsym $mod+j focus left
bindsym $mod+k focus down    
bindsym $mod+b focus up
bindsym $mod+o focus right

という設定も、デフォルトにあったから
ああ、すでにVimキーバインドでも操作できるようになってるんだ……と思い込んだのです。

しかし、よく考えたら
Vimでは、左=h、下=j、上=k、右=lでした。

上の設定では、左=j、下=kのようにズレてて
あと2方向は全然違うアルファベットなことを見逃してました。

こうなってる理由は、たぶん
$mod+h という組み合わせが、よく使う「ウィンドウ分割方向を水平に」として
使用済みだからです。

そして、私が「右のウィンドウを選択」だと思い込んでた $mod+l
実際にはblur-lockの起動で、やや遅れて起動することから
どのキーが原因だったのか調査しにくかったのです。


この設定は
~/.config/i3/configを良く読めば、ちゃんと書かれてました。

これにハマった人は私以外にもいて
私と違って、電源オフにせず

ロックされたまま、別の端末から写真を添付して質問して
解決した様子が、英語サイトでは見つかります。

タスクバーの時計の秒部分を無くすには?

デフォルト状態で、タスクバー右下にデジタル時計が表示されてます。
秒の桁まであるところが、Windowsと違います。

私の使ってるスマートウォッチでは、秒針の描画をやめるだけで
電池の減りが1/60になります。

ノートPCに入れたLinuxでは、タスクバー以外の電力消費が支配的なので
ぜんぜん効果はないでしょうが、1秒ごとにカウントされるとなんか焦るので、消しちゃいます。

この編集も
nvim ~/.config/i3/i3blocks.conf です。

Windowsと同じ形式にするには、

[time]    
#label=
#command=date '+%a %d %b %H:%M:%S'
command=date '+%Y/%m/%d %H:%M'

のように変えましょう。

ターミナルを半透明にするには?

デフォルトの ~/.config/i3/config の内容は
半透明にするための直前までしてくれてるのですが、コメントアウトされてる状態でした。

#exec_always --no-startup-id picom -b

コメントを解除すればいいわけですが
解除するだけだと、OS起動時に picom コマンドを呼ぶことになり
いまターミナルで picom と打っても Unknown command: picom って出るってことは

これだけでは効果がないことは、コーラを飲んだらゲップが出るのと同じくらい確実なので
picomのインストールも必要です。

yay -S picom

これで、次回起動時からはターミナルが半透明になりました。

VSCodeなどを表示するワークスペースを固定するには?

~/.config/i3/config で設定するわけですが
ややこしいのは、VSCodeだよーって指定するための文字列が
バイナリ名だったり、ウィンドウクラス名だったり、まちまちなことです。

全部、事前に調べておく必要があります。

xpropsというツールを使います。

yay -S xorg-xprops


ターミナルからxpropsを起動すると、マウスカーソルが変化するので
調べたいウィンドウをクリックします。

ターミナルに情報が表示されるので

WM_CLASS(STRING) = "google-chrome", "Google-chrome"

のような行を見つけます。

Chromeの場合
バイナリ名は google-chrome-stable ですが
クラス名は google-chrome ということです。

こうやって調べると
VSCodeのクラス名は Code であると分かります。

Simplenoteは Simplenote でした。

キーボードのファンクションキーで輝度を変更するには?

デフォルトでも音量+/-は機能したのに、輝度+/-は機能しませんでした。

~/.config/i3/config によれば
ファンクションキーを押した時、xbacklightというコマンドが実行されてるようですが

ターミナルでxbacklightを実行してみると

No outputs have backlight property

と表示されちゃいました。
この文言はよくあるケースのようで、対策は簡単に見つかります。
https://wiki.archlinux.jp/index.php/バックライト

xrandr --output eDP --brightness 0.8

と打ってみたところ
私の環境ではxrandrはちゃんと機能してたので
xbacklightでなく、xrandrを使うように変更しました。

ただ、xbacklightには輝度を相対値で指定できる引数がありますが
xrandrは絶対値でしか指定できないようです。

これを解決するためのスクリプトを公開してる人がいて
https://askubuntu.com/questions/1150339/increment-brightness-by-value-using-xrandr

これを改造して使いました。


そのスクリプトを ~/bin に置いた場合
~/.config/i3/config

# Backlight control
#bindsym XF86MonBrightnessUp exec xbacklight +5 && notify-send "Brightness - $(xbacklight -get | cut -c1-2)%"
#bindsym XF86MonBrightnessDown exec xbacklight -5 && notify-send "Brightness - $(xbacklight -get | cut -c1-2)%"
bindsym XF86MonBrightnessUp exec ~/bin/bright.sh Up && notify-send "$(~/bin/bright.sh)"
bindsym XF86MonBrightnessDown exec ~/bin/bright.sh Down && notify-send "$(~/bin/bright.sh)"

のように書き換えます。

bright.sh の内容は

#!/bin/bash

MON="eDP"    # Discover monitor name with: xrandr | grep " connected"
STEP=5          # Step Up/Down brightnes by: 5 = ".05", 10 = ".10", etc.

CurrBright=$( xrandr --verbose --current | grep ^"$MON" -A5 | tail -n1 )
CurrBright="${CurrBright##* }"  # Get brightness level with decimal place

Left=${CurrBright%%"."*}        # Extract left of decimal point
Right=${CurrBright#*"."}        # Extract right of decimal point

MathBright="0"
[[ "$Left" != 0 && "$STEP" -lt 10 ]] && STEP=10     # > 1.0, only .1 works
[[ "$Left" != 0 ]] && MathBright="$Left"00          # 1.0 becomes "100"
[[ "${#Right}" -eq 1 ]] && Right="$Right"0          # 0.5 becomes "50"
MathBright=$(( MathBright + Right ))

[[ "$1" == "Up" || "$1" == "+" ]] && MathBright=$(( MathBright + STEP ))
[[ "$1" == "Down" || "$1" == "-" ]] && MathBright=$(( MathBright - STEP ))
[[ "${MathBright:0:1}" == "-" ]] && MathBright=0    # Negative not allowed
[[ "$MathBright" -gt 999  ]] && MathBright=999      # Can't go over 9.99

if [[ "${#MathBright}" -eq 3 ]] ; then
    MathBright="$MathBright"000         # Pad with lots of zeros
    CurrBright="${MathBright:0:1}.${MathBright:1:2}"
else
    MathBright="$MathBright"000         # Pad with lots of zeros
    CurrBright=".${MathBright:0:2}"
fi

if [[ $CurrBright == "1.10" ]] ; then
    exit 0
fi

xrandr --output "$MON" --brightness "$CurrBright"   # Set new brightness

# Display current brightness
#printf "Monitor $MON "
echo $( xrandr --verbose --current | grep ^"$MON" -A5 | tail -n1 )

です。

元にしたスクリプトには

  • 0.00から1.00までは0.05刻みで変化
  • 1.00からは0.10刻みで変化

という親切な分岐が入ってるのですが、判定がちょっと変で
1.00から0.90に変化しちゃう可愛いバグがあります。

せっかくなので、そのままにしておきました。


xrandrでは100%を超える輝度を設定でき
画面が白く飽和しちゃうので

100%で打ち切りにする分岐を入れました。

eDP の部分は、環境によって違うので

xrandr | grep " connected"

で調べた文字列を入れてください。

フタを閉じたときや無操作時間で、自動的にスリープさせるには?

xfce4-power-managerを入れます。

yay -S xfce4-power-manager

EndeavourOS i3-WMでは
$mod+d でrofiというランチャー的なものが、画面中央にポップアップします。

GUIアプリを起動するのは、この方法が楽です。

$mod+d の後、「power」と打って「電源管理」を起動します。


サスペンド、ハイバネート、シャットダウンなどを選べます。

私は知らなかったのですが
ハイバネートって、あらかじめswapを作っておかないと実行できないのですね。

常識すぎるのかそんな警告は出ないので
ナンデ!?ナンデ!?
って粘った後、サスペンドでいいや……と落ち着きました。

ファイルを検索するには?

タイル型ウィンドウマネージャを使うような人ならば
findとかgrepとか使うのを想定してるのでしょう。

デフォルトではGUIでのファイル検索ツールが入ってません。

私は軟弱なので
yay -S catfish しました。

クリップボード履歴を使うには?

yay -S xfce4-clipman-plugin しました。

~/.config/i3/config

# clipman-applet
exec --no-startup-id xfce4-clipman

のように、コメント解除します。

タスクバーの右端に
Clipmanのアイコンが表示されるようになります。

そのアイコンを右クリックし、プロパティを開き
即時貼り付け(Ctrl+V)を有効にするのが、普通の使い方のようです。

ただ、ブラウザなどへの貼り付けはそれで良いのですが、
ターミナルはCtrl+Vでなく、Ctrl+Shift+Vなわけで、ペーストされませんでした。

xfce4-popup-clipman もまだ表示に成功してません。
これらができないと使いにくい……

Bluetoothを設定するには?

yay -S blueberry しました。

~/.config/i3/config

# start blueberry app for managing bluetooth devices from tray:
exec --no-startup-id blueberry-tray

のように、コメント解除します。

これをしなければ、機器を認識できないわけではありません。

便利なGUIツールを入れとくというだけです。

タスクバーの右端にBluetoothのアイコンが表示されるようになります。

ログオフ時の大音量BEEP音を消すには?

なぜBEEPを鳴らすのがデフォルト設定なのでしょう……

初めて終了させる時にビビると思います。

ほか、ターミナル操作でも、Warningを知らせる際に時々BEEPが鳴ります。
このままでは外で使えません。

Xfceでも同様なようで、対策は簡単に見つかりました。

/etc/modprobe.d/nobeep.conf を開くか
存在しなければ新規作成し

blacklist pcspkr

と1行書いておけば、すべてのBEEPが止みました。

壁紙を変更するには?

これが簡単なように見えて、私には難しくハマりました。
暫定的な対策で実現しましたが、正式な方法は今でも分かりません……

デフォルトでは
/usr/share/endeavouros/backgrounds/endeavouros-wallpaper.png
が、壁紙として表示されてます。

そして、この画像は
OS起動直後にパスワードを入れる画面の壁紙とも共用してます。


EndeavourOS i3-WMでは起動直後に
よくあるWelcomeメッセージ的なポップアップが表示されますが

そこに「Choose one of the EndeavourOS wallpapers」というボタンがあり
そこから壁紙を変更できます。

ただ、次回起動時に
確かに変更後の壁紙が一瞬は表示されるものの
すぐデフォルトの壁紙に表示が上書きされてしまう現象が起きました。

仕方ないので
自分の設定したい画像を endeavouros-wallpaper.png にリネームして
/usr/share/endeavouros/backgrounds/endeavouros-wallpaper.png を上書きしました。

fishでフォント色を反映させるには?

これもハマりました。

私はfishを使ってますが、fish_config と打って表示される設定ページから
Currentのカラー設定を変更しても、一部の文字色にしか反映されないのです。

完全に反映されないわけでもない。
こんな現象は初めてでした。

このままでは ls で表示されるファイル一覧が
かなり濃い青なので、見にくいのです……

これはfish側でなく、ターミナルの設定で
「配色」タブの「ボールドのテキストを明るい色で表示する」チェックボックスを
付けたり消したりしてるうちに直りました。

これさえ覚えておけば何とかなる操作方法

間違って何かのウィンドウを起動しちゃって消したい時や
消したいウィンドウの右上に×ボタンがない時は
$mod+q で、とにかく終了できると覚える。

ターミナルは $mod+Enter で起動し
ワークスペース1で起動するので
ワークスペース1にいない場合は、起動しても見えない。

ワークスペース1に移動するには、$mod+1
数字部分は10以降の2桁だろうと、認識してくれる。

$mod+1の部分を、もし$mod+Shift+1 と打つと
「ワークスペース1に移動する」という意味でなく
「いま選択中のウィンドウを、ワークスペース1に移動する」という意味に変わる。


なので、なにか新しいウィンドウを起動したい場合は
あらかじめ $mod+7 のように番号の大きなワークスペースに移動した後で
$mod+d でrofiから起動するか

とりあえず今いるワークスペースは気にせず
$mod+d でrofiから起動しちゃった後

たぶん画面が左右に分割された右に、そのウィンドウが開くだろうけど
$mod+→ でわざわざ選択しなくても、すでにそのウィンドウが選択された状態(枠が白い状態)
になるので、$mod+Shift+7 とかで別ワークペースに飛ばすか

の2択なのだと思う。


ターミナルとブラウザとファイラーは
よく使う特別扱いなので
$mod+Enter$mod+w$mod+n で起動できるようになってる。

そして、それぞれワークスペース1、2、3で開くように設定されてる。

それ以外のアプリは
今いるワークスペースで開く、という法則がある。

ワークスペース4、5にはメーラーとメッセンジャーが登録済みなのだけど
どっちも使わないし

私はこのデフォルト設定を編集して
ワークスペース4にSimplenoteを、ワークスペース5にVSCodeを当てはめた。

VSCodeは全画面で使いたい(分割するなら、VSCodeとしての分割機能でやりたい)し
VSCodeは複数起動することが多いだろうから
ワークスペース6、7などにも使っていけるよう、まず5番にしてるというわけ。


i3wmを使うと、ブラウザもVimキーバインドで操作できたほうが便利なので
Vimuimを入れる。
https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb?hl=ja

ChromeのURLバーに移動するキーボード操作は複数あるけど
Ctrl+lが便利で

サイト内の検索ボックスへの移動とかは
Vimuimの機能である f を発動させてジャンプするのが楽。

新しいタブを開く Ctrl+t
Vimuimが入ってようと上書きされず、ちゃんと動いてくれる。


私はWindows Terminalに慣れてたので

xfce-terminalでは、選択しただけでクリップボードに入ってくれないことや

コピーが Ctrl+c でなく Ctrl+Shift+c
ペーストが Ctrl+v でなく Ctrl+Shift+v なのが
ちょっと使いにくい。

これを変える方法はあるのかしら。


ゲームとかリモートデスクトップ系は
全画面で使うのがフツーなので
$mod+8 とかで、大きな数字のワークスペースに隔離しても良いけど

とりあえずどこでいいから起動しちゃって
$mod+f でフルスクリーンにして

使い終わったら $mod+q で捨てる
という使い方が楽。

だって、1つのワークスペースを専有できたとしても
上下左右に数ピクセルのギャップが入ってて、厳密には最大解像度でないから

結局 $mod+f は押すんだもの。


以上、便利に使える設定を説明してみました。

タイル型ウィンドウマネージャでは
conky を使って、PCのリソース使用量などをグラフィカルに表示する文化もあるようです。

でも、私は入れませんでした。

EndeavourOS i3-WMの場合、タスクバー中央部に
CPU温度、使用メモリの%、通信速度など、最もほしい情報はすでに表示されてて
何も追加しないのがシンプルだったからです。


あと、i3wmでのマルチモニターは面白い仕様でした。

プライマリディスプレイは、ワークスペース1、3、4、5、……用になり
セカンダリディスプレイはワークスペース2専用になるのですね。

デフォルトでは、ワークスペース2にはWebブラウザが関連付けられてるので
セカンダリディスプレイは、Webブラウザの表示専用として使うことになります。

この割り切った仕様……なるほどなー、と思いました。


次回は

  1. i3wmでなくても、Arch Linuxならば当たり前にする設定
  2. Arch Linuxでなくても、Linuxならば当たり前にする設定

の中で、つまづいた箇所を羅列します。

https://zenn.dev/kako_jun/articles/00c539bec2141b

Discussion