🔥

はじめてArch Linuxをセットアップしてみた

2024/04/09に公開
1

インストール

インストールガイド通りにすれば問題ない。80%だけインストールガイド通りにすれば問題あり。

GRUB

この記事で正しいコマンドを発見。

ただし、arch-chroot /mnt/mntに移動してからにした方がやや楽になる。でないとgrub-install: error: failed to get canonical path of airootfs´.`のようなエラーが出るかもしれない。(参考

間違い

間違いその1:イーサネットケーブルをちゃんと入れないこと

  1. ping archlinux.org -> Temporary error in name resolution
  2. systemd-resolved(名前解決)が機能していないと錯覚
    • systemctlで調べるとちゃんと機能していることに気づく
  3. このスレッドをみてdhcpcdをいじってみるが、効果なし

間違いその2:EFIパーティションは割当て済みと錯覚

レイアウトの例を見て、fdisk -lの出力に似ているからスルー(かつてUbuntuをインストールしたこともあり、レイアウトはその時にできたかと結論を出す):

/dev/sda -> 119GB
/dev/sdb -> 14.4GB
/dev/sdb1 Boot なんちゃらかんちゃら

これで/dev/sda/dev/root_partitionで、/dev/sdbはスワップで、/dev/sdb1/dev/efi_system_partitionと錯覚
当時、/dev/sdbがインストール用USBを指しているなんて考えもしなかった

間違いその3:ルートユーザーのパスワードを設定しないこと

  1. 第3.7ステップをスルー
  2. GRUBで起動時にrootにログインできない
  3. 同時にGRUB段階きたので、インストールシェルに戻るにはどうすればいいかわからず
  4. 忘れてしまった root パスワードをリセットするを読んで、GRUBカーネルパラメータでシェルに帰京
  5. 無事passwd

インストール後

ネットワーク接続

  1. NetworkManagerインストール
  2. systemctl start NetworkManagerでネットワークマネージャを起動

ユーザー設定

新しいユーザを登録:ユーザー管理

その時点で新ユーザーはsudoコマンドが使えないことに気づき、visudo/etc/sudoersを編集し、新ユーザにsudo使用の権利を与える:

  1. @keitti73さんにコメントで教えていただいたように)export EDITOR=vimvisudovimに対応させる(デフォルトでviになっている)
  2. visudo
  3. #%sudo ALL=(ALL) ALLを非コメント化
  4. ユーザをsudoグループに追加

GUI設定

  1. Xorgをインストール
  2. xinitをインストールし、startxXorgを起動
  3. まだシェルに馴染んでいないと感じ、当分ウインドーマネージャーのインストールを断念

次に、Swayというi3風タイル型ウィンドーコンポジたをダウンロードした。

ターミナルエミュレータ

最初はtmuxをそのまま使っていたが、Nerd Fontsとリガチャーが恋しくなりkittystarshipを追加した。

オーディオ設定

公式Wikiに記載されているどおりにalsa-utilsをダウンロードし、alsamixerでミュートを解除してから$ speaker-test -c 2で音はヘッドホンに届いていると確認。だが、ブラウザーで動画を再生しても音はしない。
そこでpulseaudioPulseAudioをインストールするとなぜか上記の問題が消える。

Neovimのインストール

Kickstart.nvimを使いたいのでNeovimをソースからダウンロードし、latestnightlyチェックアウトしないといけない

GitHubレポジトリをクローンするためにSSHをインストール:

  1. opensshをインストール
  2. GitHubのドキュメンテーションを参考にSSHキーを生成

SFTP設定:

  1. 間違った情報を含む記事を信用してしまい、2時間を無駄に
    • -s /usr/bin/nologinでSFTPユーザーにシェルへのアクセスを与えないとパスワードによるSSH承認ができなくなる(参考
  2. 自分のMacからsftp <ユーザ名>@<IPアドレス>で無事接続

SFTPでパブリックキーを自分のMacに送信し、GitHubアカウントに追加

Neovimをクローンし、INSTALL.mdでインストール。

日本語入力はfcitxではなくfcitx5

ここで参考になったのはビデカメさんの記事

アップデートをもらうのはfcitx5のみだから。

また、「fcitx5」パッケージではなく、fcitx5にくわえて便利なコンフィグ・問題診断ツールを備える「fcitx5」をインストールしましょう。他に日本語対応のfcitx5-mozcをインストールする:

sudo pacman -S fcitx5-im fcitx5-mozc

次に~/.xprofileファイルを作成し、内容を下記にする。これでXを使えばfcitx5も機能するはずだ。

~/.xprofile
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

さらに、fcitx5がkittyで機能するように次の環境変数も追加する:

~/.xprofile
...
GLFW_IM_MODULE=ibus

fcitx5の自動起動

startxでウィンドーマネージャを起動すると~/.xinitrcが読み込まれるので、~/.xinitrcからfcitx5を起動する。たとえば:

~/.xinitrc
# デフォルトのウィンドーマネージャをswayにする
session=${1:-sway}

# 先にfcitx5を起動する
fcitx5 & exec $session

注意点:

  • execの場合、複数の命令をつなげるにはexecキーワードの前に書かないといけない
  • fcitx5を繋げず起動させるとウィンドーマネージャが立ち上がらない

caps lockで言語を切り替える

sway

~/.config/sway/configに次を追加:

~/.config/sway/config
input "type:keyboard" {
    xkb_options caps:super
}

X

参考:https://qiita.com/macinjoke/items/746c0c0adb74cfdeb9e7

要は:

-1. 言語切り替えしても文字大小が変わらないためにXmodmapを使ってcaps lockキーがWindowsキー(すなわち「Left Super」か「Super_L」)のkeysymを発するようにする
1. $ xmodmap -pke > ~/.Xmodmapで現在のキーボードコンフィグを~/.Xmodmapに出力
2. ~/.Xmodmapの冒頭にremove lock = Caps_Lockを入力することでcaps lockの切り替え効果を無効にする
3. xev | grep keycodeでcaps lockキーのキーコードを確認(Waylandならxevではなくwev):caps lockのキーコードは66
4. ~/.Xmodmapkeycode 66の行を見つけ、keycode 66 = Super_Lに変更
2. fcitx5-configtoolのほうで切り替えキーを「Left Super」にする(caps lockキーを押すだけでOK)

最後に、再起動する際に~/.Xmodmapが読み込まれるように~/.xprofileを変更する:

~/.xprofile
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap

Swayに関する警告

2024年4月6日時点でswayまだポップアップをサポートしていないので、一旦swayを削除しsway-imに置き換えた。

フォント

コード:FiraCode Nerd Font Mono
その他:Noto

$XDG_CONFIG_HOME/fontconfig/fonts.conf$XDG_CONFIG_HOMEはデフォルトで~/.configに等しい)を作成し、中身はフォント設定/サンプル日本語コンフィグと鮮明なフォントコンフィグの組み合わせになっている。

Anki

最初はAURからankiパッケージをインストールしたが、ユーザー認証の際にAnkiが繰り返しクラッシュしていたため、直接バイナリをダウンロードすることにした。

ただし、日本語版ArchWikiでは、バイナリをインストールしたい場合anki-official-binary-bundleがいいと記述されてあるが、このパッケージはもう存在しない。代わりにanki-binを使っている。

Android

Rust製ゲームエンジンのbevyによるAndroid向けのゲーム開発のためにAndroid SDKとAndroid Emulatorをダウンロードした。ただ、どうしてもAndroid Studioの使用は避けたかったため、Arch Wikiに載っている手順を踏んでbevyのAndroid向け模範プロジェクトを動かした。

Android システムイメージのところまでいくだけで、実機にアプリ搭載することができたが、それから多少手こずってしまった箇所があり、それらを紹介したい。

  1. エミュレータを動かすにはシステムイメージを用意しないといけない
  2. システムイメージのダウンロードには sdkmanager と avdmanager が必要
    1. いずれもandroid-sdk-cmdline-tools-latestとともにダウンロードされる
  3. sdkmanagerでシステムイメージをダウンロードし、次にavdmanagerで先のシステムイメージを基にエミュレータの実行できるAVDデバイスを生成
  4. emulator @<デバイス名>を実行

最後にクローンしたbevyレポジトリからcargo apk run -p bevy_mobile_exampleを実行すれば模範アプリは自動的にエミュレータに接続する。

…と思ったらVulkanから使用しているNVidia GPUドライバーとの互換性がないというエラーがきた。そこでArchのデフォルトNVidiaドライバーの「nouveau」はOpenGlやVulkanをサポートしないとやっとわかった。
プロプライエタリNVidiaドライバーをインストールしたら、エミュレータがちゃんと立ち上がる。

備忘録

環境変数はどこから設定されたか表示

ZSHならzsh -xlでシェル起動時の流れを再現し、表示できる。ただ、文字は大量に溢れ、grepにパイプできないため、事前にscript <ファイル名>でファイルに出力を書き込むがいい。

ディスプレイ情報を表示

  • Xのままならxorg-xrandrをインストールしてxrandr --listmonitorsを実行
  • Swayならswaymsg -t get_outputs

GPU情報

lspci -v | grep -A1 -e VGA -e 3D

xrandrでデュアルディスプレイを設定

  1. xrandr --listmonitorsでディスプレイの名称を確認
  2. xrandr --output <画面1> --primary --auto --output <画面2> --auto --right-of HDMI-1
  3. 上記を~/.xinitrcに追加し、Xウィンドーマネージャ起動時に設定を反映してもらう

awesomeでスクリーンショットを撮る

  1. Shutterをインストール
  2. ~/.config/awesome/rc.luaに次のグローバルキーバインドを追加:
~/.config/awesome/rc.lua
-- Screenshots
awful.key({}, "Print", function()
  awful.spawn.with_shell(terminal .. " -e nohup shutter &")
end, { description = "take screenshot", group = "client" }),
awful.key({ "Shift" }, "Print", function()
  awful.spawn.with_shell(terminal .. " -e nohup shutter -s &")
end, { description = "take interactive screenshot", group = "client" })
- `nohup shutter &`じゃないとターミナルが開き、邪魔になる

swayでスクリーンショットを撮る

  • GrimSlurpをインストール
  • この記事を参考に、Swayのコンフィグで下記を追加:
# 全画面のスクリーンショットを撮る
bindsym Print exec grim -t jpeg ~/screenshots/$(date +%Y-%m-%d_%H-%m-%s).jpg

# 画面の一部を取り込む
bindsym $mod+Print exec grim -t jpeg -g "$(slurp)" ~/screenshots/$(date +%Y-%m-%d_%H-%m-%s).jpg

swayでキーリピート速度を調整

~/.config/sway/config
input type:keyboard {
    repeat_delay 200
    repeat_rate 30 # Hz(高いほうが早い)
}

øみたいな変な文字を出力

一番簡単な方法はコンポーズキーを設定する方法だ。たとえば、メニューキーをコンポーズキーに設定するにはターミナルにsetxkbmap -option compose:menuを書けばいい。

この変更のセッション間の保持は、~/.Xmodmapを編集すれば簡単に設定できるだ。例えば、メニューキーをマップしたければ:

~/.Xmodmap
...
keycode 135 = Multi_key
...

keycode 135はメニューキーに相当するのに対し、Multi_keyはコンポーズキーに相当する。

Xmodmapの使用法はcaps lockで言語を切り替えるをご参照ください。

Discussion

keitti73keitti73
export EDITOR=vim

で環境変数を変えるとvisudoをvimで開けると思います