🐧

Archlinux hyprland インストール

2024/06/01に公開

Windows11とディスクを分けてデュアルブート
systemd-bootはESP以外にあるディスクからEFIプログラムを起動できないため、EFISTUBの機能を利用することもできる
cf. https://wiki.archlinux.org/title/EFISTUB#Directly.2C_without_boot_manager

Windows側の準備

RTCのUTC化

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

cf. https://qiita.com/McbeEringi/items/23a2f254728f655f9f29

Archlinuxのインストールメディアを起動

ブートローダーにArchlinuxのロゴが出た場合はBIOSで起動している可能性アリ
UEFIモードで起動する

インストールメディアはメモリ上にデータを展開するので、起動後はUSBを抜いてもOK

beep音が煩い場合はmodprobe -r pcspkrでオフにできる

インストール

cd /

キー配列を変更する

JIS配列のキーボードを使用している場合

loadkeys jp106

CapsLockをControlにする

cp /usr/share/kbd/keymaps/i386/qwerty/us.map.gz ./
gunzip us.map.gz
cat us.map | sed 's/Caps_Lock/Control/' > myus.map
loadkeys myus.map

pacmanのトラブル回避

pacman -S archlinux-keyring
reflector --latest 5 --sort rate --save /etc/pacman.d/mirrorlist

パーティションの作成

lsblk
cfdisk /dev/nvme0n1
# EFI → 8GB TypeにEFI System
# Swap → メモリx1.5GBくらい TypeにLinux Swap
# 残り → Linux Filesystem
lsblk # 確認

mkfs.fat -F 32 /dev/nvmen1p1
mkswap /dev/nvmen1p2
mkfs.ext4 /dev/nvme0n1p3

mount /dev/nvmen1p3 /mnt
mount --mkdir /dev/nvmen1p1 /mnt/boot
swapon /dev/nvmen1p2

lsblk

(EFIパーティションをWindowsから消す方法)

> diskpart
list disk
sel disk N
sel partition N
delete partition override

/etc/pacman.confを編集してmultilibリポジトリを有効にする

pacstrap

pacman -Sy archlinux-keyring
pacstrap -K /mnt base linux linux-firmware efibootmgr sudo vim git base-devel networkmanager bluez bluez-utils amd-ucode nvidia nvidia-utils linux-headers lib32-nvidia-utils

amd/nvidia関係は適切なパッケージを選択

hyprlandはNVIDAのGPUを公式でサポートしていないので、Wikiの手順を利用する
nvidia/nvidia-utils/linux-headers/nvidia-dkms/lib32-nvidia-utils`あたりはhyprlandをNvidiaGPUで動作させるために必要らしい

https://wiki.hyprland.org/Nvidia/

設定

genfstab /mnt >> /mnt/etc/fstab
arch-chroot /mnt

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc
vim /etc/locale.gen # en_US.UTF8とja_JP.UTF8の行のコメントアウトを外す
# 仮に英語でしかLinuxを使わなくてもja_JP.UTF-8のコメントアウトを外すこと(FireFoxなどの日本語表示が中華フォントになる
locale-gen
echo LANG=en_US.UTF8 >> /etc/locale.conf
echo ホスト名 > /etc/hostname

passwd
useradd -m -g wheel ユーザー名
passwd ユーザー名
vim /etc/sudoers # Defaults env_keep += "HOME" と %wheel ALL=(ALL:ALL)

bootctl install
vim /boot/loader/loader.conf
# default arch.conf
# timeout 0
# console-mode keep
# editor no

cat /etc/fstab > /boot/loader/entries/arch.conf
# title Arch Linux
# linux /vmlinuz-linux
# initrd /amd-ucode.img
# initrd /initramfs-linux.img
# options root=PARTUUID=*-*-*-*-* rw resume=PARTUUID=*-*-*-*-*
# options nvidia_drm.modeset=1
# options quiet loglevel=0 splash

vim /etc/mkinitcpio.conf
# MODULESにresumeとnvidia nvidia_modeset nvidia_uvm nvidia_drmを追加(resumeはハイバネート用)
# base udevをsystemdに置き換えると起動が高速化されるらしい?

mkinitcpio -P

nano /etc/pacman.conf
# Color と VerbosePkgLists と ParallelDownloads=5 の行の # を外す
echo nameserver 127.0.0.53 >> /etc/resolv.conf # DNSの設定
systemctl enable NetworkManager bluetooth

exit
reboot

ディスプレイマネージャーから起動する場合、.xprofileの最後にsleep 1を書かないとうまく起動しない場合がある。

sleep 1

Tips: 日本語表示の問題を解消する

この設定例ではOSの言語設定をen_US.UTF-8にしています。基本的にスクリーンバッファのターミナルは日本語フォントの表示に対応していないため、コンソールで文字が読めなくなってしまうためです。
しかし、GUIアプリなどでの漢字などの文字のレンダリングは文脈より判断される言語によってグリフを切り替えて表示するため、日本語を優先しないと中華フォントで漢字が表示されてしまいます。
Firefoxなどでは下記画像の設定を書き換えるとたいていうまくいきます。

WMの中でだけLANGを設定することがおすすめです。

Caps_lockをControlにする

ディスクにインストール後にもう一度実行して永続化する

mkdir -p /usr/local/share/kbd/keymaps
cp /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/local/share/kbd/keymaps/personal.map.gz
gunzip /usr/local/share/kbd/keymaps/personal.map.gz

vim /usr/local/share/kbd/keymaps/personal.map
Caps_lockをControlに変更

vim /etc/vconsole.conf
KEYMAP=/usr/local/share/kbd/keymaps/personal.map

再起動後の設定

yayのインストール

AURヘルパー pacmanコマンドを打つところを全て置き換えて問題ない

git clone https://aur.archlinux.org/yay
cd yay
makepkg -si # インストール
cd ..
rm -rf yay
yay

pacman.confの設定変更

sudo reflector --country 'Japan' --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

mdnsの設定

これで、hostname.localみたいなのが解決できるようになる

systemctl --now enable systemd-resolved
# /etc/NetworkManager/NetworkManager.conf ファイルを編集し、[main] セクションに以下のエントリーを設定します。
# dns=systemd-resolved
# NetworkManager サービスを再読み込みします。
systemctl reload NetworkManager

cf. https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/using-systemd-resolved-in-networkmanager-to-send-dns-requests-for-a-specific-domain-to-a-selected-dns-server_using-different-dns-servers-for-different-domains

.xprofile

Hyprland側に適用させたい環境変数は.xprofileに書けば全部読みこんでくれる。
hyprland.confに書いてもいいけど、swayなどでも使いまわせてよい。

ディスプレイマネージャーから起動する場合、.xprofileの最後にsleep 1を書かないとうまく起動しない場合がある。

sleep 1

ディスプレイマネージャー

基本的にgettyでログインしてHyprlandコマンドを実行するだけでログインができるが、任意のディスプレイマネージャーを使う方法もある

yay -S greetd greetd-tuigreet
/etc/greetd/config.toml
[terminal]
# The VT to run the greeter on. Can be "next", "current" or a number
# designating the VT.
vt = 2

# The default session, also known as the greeter.
[default_session]

# `agreety` is the bundled agetty/login-lookalike. You can replace `/bin/sh`
# with whatever you want started, such as `sway`.
# command = "agreety --cmd /bin/sh"
command = "tuigreet -t -r --remember-session --asterisks"

# The user to run the command as. The privileges this user must have depends
# on the greeter. A graphical greeter may for example require the user to be
# in the `video` group.
user = "kat0h"

現在自分の環境で入れているパッケージの一覧

pacman -Qe | awk '{print $1}' | xargs | wl-copy

alacritty autotiling base base-devel bat blueman bluetuith bluez bluez-utils brightnessctl btop chezmoi clang cliphist cmake cups cups-browsed discord dmenu duf dunst efibootmgr eog evince fcitx5 fcitx5-configtool fcitx5-gtk fcitx5-mozc fcitx5-qt fcitx5-skin-fluentdark-git fcitx5-skk ffmpeg ffmpegthumbnailer firefox firefox-i18n-ja font-manager foot fzf gauche gcc ghc gimp git git-delta git-filter-repo github-cli gnome-commander gnome-disk-utility go google-chrome gparted greetd greetd-tuigreet grimshot gst-libav gst-plugins-ugly gtk-engine-murrine gucharmap gvfs-smb helvum htop httpie hypridle hyprland-git hyprlock hyprprop-git hyprutils-git hyprwayland-scanner-git inetutils inkscape intel-media-driver intel-ucode iotop iwd jq keeweb-desktop-bin kitty lazygit libvncserver linux linux-firmware linux-pf llvm make mako man-db man-pages mc mpv nano nautilus nemo nemo-preview neofetch neovim-nightly-bin network-manager-applet networkmanager networkmanager-l2tp noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra nwg-look nyancat octopi openldap papirus-icon-theme pavucontrol pipewire pipewire-alsa pipewire-audio pipewire-jack pipewire-pulse pipewire-session-manager polkit-kde-agent pop-icon-theme portaudio powertop qbittorrent qt5-wayland ranger rclone remmina rhythmbox ripgrep rsync rustup selectdefaultapplication-git slack-desktop sof-firmware spotify-launcher spotify-tui spotifyd steam strongswan sudo sushi sway-git swaybg swayidle swaylock sysstat systemd-ui tailscale tcc thunar tigervnc tlp tmux tokei ttf-dejavu-nerd tumbler unarchiver unzip vim visual-studio-code-bin vulkan-tools vulkan-validation-layers w3m waybar waylock waypipe wayvnc wdisplays wf-recorder wget wireplumber wl-clipboard wl-mirror wmenu wofi xdg-desktop-portal-hyprland-git xdg-terminal-exec-git xorg-xeyes xorg-xhost xorg-xwayland yay yay-debug zsh

細かいパッケージの設定

fcitx5

Wayland環境で苦労するのはだいたいここ。
Hyprlandは.xprofileを自動で読み込むので、設定したい環境変数はここに設定しておくと幸せになれるかも。

基本的にココらへんの環境変数は抑えておきたい

export XDG_SESSION_TYPE=wayland

export MOZ_ENABLE_WAYLAND=1

export QT_QPA_PLATFORM="wayland;xcb"

export XDG_CURRENT_DESKTOP=sway
export XDG_SESSION_SESSION=sway

export LIBSEAT_BACKEND=logind

export GDK_DPI_SCALE=1
export QT_SCALE_FACTOR=1

export WLR_DRM_NO_MODIFIERS=1

export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5

asdf

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0

fcitx5の設定

GUIでSKKを追加して、アドオン設定画面からSticky Shiftを有効化

cf. https://mako-note.com/ja/ibus-skk-stickyshift/

hyprland周りの設定

git clone https://github.com/kat0h/dotfiles ~/.local/share/chezmoi
chezmoi apply

通知デーモン

dnustを使っている

Terminal=trueが指定された.desktopファイルを実行できない

yay -S xdg-terminal-exec-git
echo org.codeberg.dnkl.foot.desktop >> ~/.config/xdg-terminals.list

cf. https://unix.stackexchange.com/questions/707469/error-with-gtk-launch-unable-to-find-terminal-required-for-application

mdns

https://www.nofuture.tv/using-mdns-with-systemd-resolved

cups

Linux用の印刷デーモン
https://wiki.archlinux.jp/index.php/CUPS

yay -S cups cups-browsed
systemctl enable --now cups
systemctl enable --now cups-browsed
CreateIPPPrinterQueues All
lpstat -tv # 出るはず

http://localhost:631/ にアクセスするとcupsの管理ページを開ける
プリンターによってはドライバがない場合もあるが、その場合ipアドレスやmDNSによるアドレスを指定してippを使える場合がある
この場合、ドライバはGenericを使う

cups.socketを代わりに有効化すると必要な時にのみcupsが有効化されるらしいが、localhost:631にアクセスしてもcupsが起動してくれないので、要検証

cf. https://qiita.com/tsuchm/items/783bcb07c6a0a4e1db63

(工研部員向け)
部室のレーザープリンターは直接ipアドレスを指定してリクエストを送るとLinuxからでも印刷できます。

spotifyd

spotifyのスピーカーとして振る舞う

yay -S spotifyd
~/.config/spotifyd/spotifyd.conf
[global]
username = ""
password = ""

device_name = "Thinkpad"
device_type = "computer"

# The audio bitrate. 96, 160 or 320 kbit/s
bitrate = 320

cache_path = "~/.cache/spotifyd"
no_audio_cache = false
systemctl enable --now --user spotifyd

spotify-tuiを使うとターミナルからspotifyを操作できる

yay -S spotify-tui
~/.config/spotify-tui/client.yml
---
client_id:
client_secret:
device_id:
port: 8888
spt

FireFox

CJKフォントを日本語のグリフで表示する


FireFox側の設定でページの表示言語に日本語を追加すると文字が中華フォントでなく日本語のフォント表示される。
(フォントを選ぶ際に中国語のフォントが優先的に表示されてしまうらしい)

Waylandバックエンドで動作させる

MOZ_ENABLE_WAYLAND=1

上の環境変数を~/.xprofileに追加する

Google Chrome

Waylandバックエンドで動作させる

google-chrome-stable --ozone-platform-hint=wayland --gtk-version=4 --enable-features=TouchpadOverscrollHistoryNavigation --enable-wayland-ime
# Waylandで動作させる
--ozone-platform-hint=wayland
# fcitx5の入力を有効にする
--enable-wayland-ime
--gtk-version=4
# トラックパッドのジェスチャによるページ遷移を有効にする
--enable-features=TouchpadOverscrollHistoryNavigation

Desktopファイルを変更する

~/.local/share/applications/下に任意のapp.desktopファイルを配置するとdrunなどが勝手に認識してくれる。

cf. https://wiki.archlinux.jp/index.php/デスクトップエントリ

VPN

大学(電通大)のVPNに接続するのにかなり苦労したので
電通大のVPNはl2tp/ipsec

yay -S strongswan networkmanager-l2tp
mkdir -p /var/lib/ipsec/nss # ↓が失敗したときだけ
systemctl enable --now strongswan-starter xl2tpd

↓VPNの設定は下記のようにする

Machine Authentication
    Type: Pre-shared key(PSK)
Advanced
    Remote ID: 0.0.0.0 # 未検証
    Phase1 Algorithms: aes128-sha1-modp1024
    Phase2 Algorithms: aes128-sha1
Enforce UDP encapsulation

これで接続すれば大丈夫なはず

samba

ファイル共有にsambaを使う

yay -S samba
sudo wget "https://git.samba.org/samba.git/?p=samba.git;a=blob_plain;f=examples/smb.conf.default;hb=HEAD" -O /etc/samba/smb.conf
nvim /etc/samba/smb.conf
# log file = /var/log/samba/%m.log
pdbedit -a -u samba_user
smb://*.*.*.*/USERNAME

rclone

sshfsの代替

rclone mount kat0hhome:/home/USERNAME kat0hhome --daemon

リモートデスクトップ

Waypipe

waypipe ssh kat0h@100.123.205.90 nautilus

ホスト・ゲスト共にwaypipeが必要
Hyprlandが起動していなくても利用可

wayvnc

vncサーバー

wayvnc 0.0.0.0

あらかじめHyprlandが起動していることが条件

WLR_BACKENDS=headless Hyprland

で画面なしでHyprlandを起動できるらしいが、マウス・キーボードがうまく動作しない

Hyprlandが起動しているがsshでしか繋げられず、wayvncの起動に失敗する場合はHYPRLAND_INSTANCE_SIGNATURE環境変数を設定する

HYPRLAND_INSTANCE_SIGNATURE=$(ls -rt $XDG_RUNTIME_DIR/hypr/ | tail -n1) hyprctl dispatch exec wayvnc 0.0.0.0

この技を使うとhyprctlを任意のシェルから叩けるようになる

スクリーンシェアリング

https://wiki.hyprland.org/Useful-Utilities/xdg-desktop-portal-hyprland/

yay -S xdg-desktop-portal-hyprland-git xdg-desktop-portal-gtk

https://mozilla.github.io/webrtc-landing/index.html

ffmpegthumbnailers

https://github.com/Marco98/ffmpegthumbnailer-mp3/blob/master/ffmpegthumbnailer-mp3.thumbnailer

Tips

pacman

自分で入れたパッケージの一覧を表示

pacman -Qs

パッケージの情報を表示

pacman -Qi <> # 情報
pacman -Fl <> # パッケージに含まれるファイル

直近でインストールしたパッケージの一覧
cf. https://bbs.archlinux.org/viewtopic.php?id=5377

Discussion