𝑨𝒓𝒄𝒉 𝑳𝒊𝒏𝒖𝒙 𝑯𝒚𝒑𝒓𝒍𝒂𝒏𝒅 𝑰𝒏𝒔𝒕𝒂𝒍𝒍 𝑩𝒂𝒕𝒕𝒍𝒆
目的
- デュアルブート
- Arch Linux
- Windows11
- Hyprland
- Wayland縛り
- メイン機として実用可能な設定をする
環境
CHUWI MiniBook X N100
OS: Windows11
CPU: Intel N100
RAM: 12GB
ROM: 512GB
KEY: jp106
機種固有の問題として6.7.3 ~ 6.8.2
はカーネルのバグで画面が正しく表示されない
- OK: 2024.02.01 (6.7.2)
- NG: 2024.03.29 (6.?.?)
- NG: 2024.04.01 (6.8.2)
概要
Arch Linux
ミニマルで軽快なLinuxディストリビューション
欲しいものだけ入れられる
コミュニティ製含めて膨大な数のパッケージがインストール可能
Hyprland
Waylandタイリングウィンドウマネージャ
自動でウィンドウを配置してくれる
アニメーションぬるぬる見た目良し
デスクトップ環境一式入れるより軽快に動作
GNOME, KDE Plasma, に次いで使われているらしい
𝑰𝒏𝒔𝒕𝒂𝒍𝒍 𝑩𝒂𝒕𝒕𝒍𝒆
ブートメディア準備
1GB程度以上の空のSDやUSBメモリ等を用意
からisoをダウンロード
Windowsなら
scoop install extras/rufus
# 等でrufusを入手、メディアに書き込み
Linuxなら
dd bs=4M if=archlinux-x.y.z-x86_64.iso of=/dev/sdx conv=fsync oflag=direct status=progress
Windows準備
パーティション縮小
ディスクの管理(Win+X K)を開く
CとかDとかNTFSとか書いてあるパーティション
右クリック>ボリュームの縮小
Bitlockerの解除
時間がかかるので注意
設定>検索>Bitlocker>暗号化を解除
RTCのUTC化
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
高速起動無効化
コントロールセンター > 電源 > 電源ボタンの動作を変更する
高速起動のチェックボックスを外す
then
- シャットダウン
- ブートメディアを接続
- 起動時にF2等でBIOSに入る
BIOS準備
高速起動 & セキュアブート無効化
Bootセクションにある
then
- Boot Override等でブートメディアから起動
- 同じ端末が複数ある場合はUEFIの記述がある方
- 黒地に白のメニューが出たらEnter
- コピー中のバーが伸び切ったらブートメディア抜いてOK
Arch Linuxインストール
最低限準備
loadkeys jp106 # 日本語配列キーボード
# echo 1 | tee /sys/class/graphics/fbcon/rotate_all # 必要であれば画面回転
ネットワーク準備
有線の場合既に接続されているはず
無線の場合はiwctlする
iwctl
station wlan0 connect SSID
station wlan0 status # 確認したかったら
ping archlinux.org # 確認
timedatectl # NTPで時刻同期
(pacman準備)
通常は不要だが署名関係のエラーが出たらこれ
rm -rf /etc/pacman.d/gnupg
pkill gpg-agent
pacman-key --init
pacman-key --populate archlinux
(画面暗くしたい)
pacman -Sy brightnessctl
brightnessctl s 10%
パーティション準備
EFIとswapとroot用に3つパーティションを作成
lsblk # 確認
#NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
#nvme0n1 259:0 0 476.9G 0 disk
#├─nvme0n1p1 259:1 0 100M 0 part
#├─nvme0n1p2 259:2 0 128M 0 part
#├─nvme0n1p3 259:3 0 88.9G 0 part
#└─nvme0n1p4 259:4 0 1.7G 0 part
cfdisk /dev/nvme0n1 # パーティションを切る
# [New] 550M (/dev/nvme0n1p4)
# [Type] EFI system
# [New] 16G (/dev/nvme0n1p5)
# 大体RAMの1.5倍の容量にする
# [Type] Linux swap
# [New] 好きなだけ (/dev/nvme0n1p6)
# [Write] yes
lsblk # 確認
#NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
#nvme0n1 259:0 0 476.9G 0 disk
#├─nvme0n1p1 259:1 0 100M 0 part
#├─nvme0n1p2 259:2 0 128M 0 part
#├─nvme0n1p3 259:3 0 88.9G 0 part
#├─nvme0n1p4 259:4 0 550M 0 part
#├─nvme0n1p5 259:5 0 16G 0 part
#├─nvme0n1p6 259:6 0 369.6G 0 part
#└─nvme0n1p7 259:7 0 1.7G 0 part
# フォーマット
mkfs.fat -F 32 /dev/nvme0n1p4
mkswap /dev/nvme0n1p5
mkfs.ext4 /dev/nvme0n1p6
# マウント
mount /dev/nvme0n1p6 /mnt
mount --mkdir /dev/nvme0n1p4 /mnt/boot
swapon /dev/nvme0n1p5
lsblk # 確認
#NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
#nvme0n1 259:0 0 476.9G 0 disk
#├─nvme0n1p1 259:1 0 100M 0 part
#├─nvme0n1p2 259:2 0 128M 0 part
#├─nvme0n1p3 259:3 0 88.9G 0 part
#├─nvme0n1p4 259:4 0 550M 0 part /mnt/boot
#├─nvme0n1p5 259:5 0 16G 0 part [SWAP]
#├─nvme0n1p6 259:6 0 369.6G 0 part /mnt
#└─nvme0n1p7 259:7 0 1.7G 0 part
インストール
pacman -Sy archlinux-keyring # 古いiso対策
pacstrap -K /mnt base linux linux-firmware intel-ucode intel-media-driver efibootmgr sudo nano git base-devel iwd bluez bluez-utils
設定
genfstab -U /mnt >> /mnt/etc/fstab # マウント構成を保存
cp /etc/systemd/network/* /mnt/etc/systemd/network # ネットワーク構成を複製
arch-chroot /mnt # インストール先に入る (chroot)
# ロケール設定
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc # 時刻同期 システム→PC本体
nano /etc/locale.gen # en_US.UTF8とja_JP.UTF8の行の#を外す
locale-gen
echo LANG=ja_JP.UTF-8 >> /etc/locale.conf
echo KEYMAP=jp106 >> /etc/vconsole.conf
echo ホスト名 >> /etc/hostname # 好きな名前
# ユーザー設定
passwd # rootのパスワードを設定
useradd -m -g wheel ユーザー名 # sudoが使えるユーザーを作成
passwd ユーザー名 # ユーザー名 のパスワードを設定
nano /etc/sudoers # Defaults env_keep += "HOME" と %wheel ALL=(ALL:ALL) ALL の#を外す
# ブートローダのインストールと設定, ハイバネートと起動画面の設定
bootctl install
nano /boot/loader/loader.conf
# default arch.conf
# timeout 3
# console-mode keep
# editor no
cp /etc/fstab /boot/loader/entries/arch.conf
nano /boot/loader/entries/arch.conf
# title Arch Linux
# linux /vmlinuz-linux
# initrd /intel-ucode.img
# initrd /initramfs-linux.img
# options quiet splash
# options resume=UUID=f724f97e-dd4d-4a90-9f20-b55fab378786 # swapパーティションのUUID
# options root=UUID=982b66f8-a687-4711-a36b-e0817456019f rw # rootパーティションのUUID
# # options video=DSI-1:panel_orientation=right_side_up # 必要であれば画面回転
nano /etc/mkinitcpio.conf
# HOOKSにplymouthとresumeを追記
# HOOKS=(base plymouth udev ... filesystems resume fsck)
pacman -S plymouth
# その他
nano /etc/pacman.conf
# Color と VerbosePkgLists と ParallelDownloads=5 の行の # を外す
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf # DNS設定
# echo nameserver 1.1.1.1 >> /etc/resolv.conf # あんまり良くない設定?
systemctl enable systemd-networkd systemd-resolved iwd systemd-timesyncd bluetooth # 次回起動時からネットワーク等を有効化
exit # インストール先から抜ける (chroot)
then
無事に起動することを祈って
reboot
設定したユーザーでログイン
iwctl
でネットに接続
export LANG=C # 英語に戻す
Hyprlandインストール
yayインストール
コミュニティパッケージ(AUR)を入れるのが楽になる
git clone https://aur.archlinux.org/yay-bin
cd yay-bin
makepkg -si # インストール
cd ..
rm -rf yay-bin
yay -Sy # パッケージ情報を最新のものに更新
Hyprlandのインストールと設定
yay -S hyprland mako pipewire pipewire-pulse pipewire-jack xdg-desktop-portal-hyprland xfce-polkit qt5-wayland qt6-wayland
yay -S waybar hyprpaper wofi cliphist grimblast brightnessctl
yay -S greetd greetd-tuigreet-bin # ログイン画面
yay -S thunar gvfs tumbler ffmpegthumbnailer # ファイルマネージャ
yay -S foot # ターミナル
yay -S gnome-keyring # キーリング
yay -S htop btop powertop smartmontools wlsunset wl-mirror # ユーティリティ
yay -S noto-fonts noto-fonts-cjk noto-fonts-emoji otf-monaspace # フォント
yay -S hyprlock hypridle # ロック画面 自動ロック
yay -S iwgtk pavucontrol nwg-look-bin gnome-themes-extra qt5ct qt6ct # GUI関係
yay -S fcitx5-im fcitx5-mozc # 日本語入力
Hyprland
# Meta(Win)+Mで終了 戻らない場合はカーソル動かす
nano .config/hypr/hyprland.conf
# $terminal = foot
# $fileManager = thunar
# exec-once = fcitx5 -d & mako & /usr/lib/xfce-polkit/xfce-polkit
# exec-once = hyprpaper & hypridle & waybar & wlsunset -l 35.7 -L 139.7 # 東京の座標
# exec-once = wl-paste --watch cliphist store
# input {
# kb_layout = jp
# }
sudo nano /etc/greetd/config.toml
# [default_session]
# command = "tuigreet"
systemctl enable greetd # pipewire-pulse
reboot
fcitxの設定でjp106キーボードとmozcを選択しておく
pamの設定
sudo nano /etc/pam.d/greetd
# #%PAM-1.0
# auth required pam_securetty.so
# auth requisite pam_nologin.so
# auth include system-local-login
# auth optional pam_gnome_keyring.so # 追加
# account include system-local-login
# session include system-local-login
# session optional pam_gnome_keyring.so auto_start # 追加
sudo nano /etc/pam.d/passwd
# ...
# password optional pam_gnome_keyring.so
dotfiles
McbeEringi/dotfiles
より要約して抜粋
yay -S chezmoi
chezmoi init mcbeeringi
chezmoi apply
以下を書き足せば最低限使える状態にはなる
export PATH=$PATH:$HOME/.local/bin
export XMODIFIERS=@im=fcitx
general {
before_sleep_cmd = hyprlock --immediate
ignore_dbus_inhibit = false
}
listener {
timeout = 60
on-timeout = brightnessctl -s --exponent=2 s 10%-
on-resume = brightnessctl -r
}
listener {
timeout = 300
on-timeout = hyprlock
}
listener {
timeout = 600
on-timeout = systemctl suspend
}
# exit menu
bind = $mainMod, M, exec, eval $(echo -e "hyprlock --immediate ;: lock\nhyprctl dispatch exit ;: logout\nsystemctl poweroff ;: power\nreboot\nsystemctl suspend\nsystemctl hibernate"|wofi -d -k /dev/null -p "exit..." -r "echo '%s'|awk 'NF{printf \"%%s\",\$NF}'")
# cliphist menu
bind = $mainMod, V, exec, cliphist list | wofi -d -p "clipboard..." | cliphist decode | wl-copy
# wl-mirror menu
bind = $mainMod, P, exec, wl-mirror -F $(echo -e $(hyprctl -j monitors)|jq -r '.[].name'|wofi -d -k /dev/null -p "mirror..." -r "printf %s")
...
# media
$v_tgt = @DEFAULT_AUDIO_SINK@
$v_notify = && notify-send -u low -t 1000 -h string:x-canonical-private-synchronous:anything V "$(wpctl get-volume $v_tgt|awk '{print $2*100 "% " $3}')"
bindl = , XF86AudioMute, exec, wpctl set-mute $v_tgt toggle $v_notify
bindle = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 $v_tgt 5%+ $v_notify
bindle = SHIFT, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 $v_tgt 1%+ $v_notify
bindle = SHIFT, XF86AudioLowerVolume, exec, wpctl set-volume $v_tgt 1%- $v_notify
bindle = , XF86AudioLowerVolume, exec, wpctl set-volume $v_tgt 5%- $v_notify
bindle = , XF86MonBrightnessUp, exec, brightnessctl --exponent=2 s +5%
bindle = SHIFT, XF86MonBrightnessUp, exec, brightnessctl --exponent=2 s +1%
bindle = SHIFT, XF86MonBrightnessDown, exec, brightnessctl --exponent=2 s 1%-
bindle = , XF86MonBrightnessDown, exec, brightnessctl --exponent=2 s 5%-
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
bindl = , print, exec, grimblast copy output
bindl = SHIFT, print, exec, grimblast copy area
general {
hide_cursor = true
grace = 5
}
background {
path = screenshot
blur_size = 8
blur_passes = 1
}
{
"layer":"top","position":"top",
"modules-left":["hyprland/workspaces","group/apps"],
"modules-center":["clock"],
"modules-right":["mpris","tray","network","wireplumber","backlight","cpu","memory","battery"],
"group/apps":{
"orientation":"inherit",
"modules":["hyprland/window","wlr/taskbar"],
"drawer":{"transition-left-to-right":false}
},
"hyprland/window":{"format":"{class}"},
"wlr/taskbar":{
"all-outputs":true,
"on-click":"activate"
},
"clock":{
"format":"{:%y-%m-%d %H:%M}",
"locale":"C.UTF8",
"tooltip-format":"{calendar}"
},
"battery":{
"format":"<small>B</small>{icon}",
"format-charging":"<small>C</small>{icon}",
"format-notcharging":"<small>N</small>{icon}",
"format-low":"{capacity}",
"tooltip-format":"Battery: {capacity}%\n{timeTo}","format-time":"{H}:{m}",
"states":{"high":100,"_":95,"low":15},
"format-icons":["\u2800","⡀","⣀","⣄","⣤","⣦","⣶","⣷","⣿"]
},
"memory":{
"format":"<small>M</small>{icon}","tooltip-format":"RAM: {percentage}%\n\nUsed: {used}G\nTotal: {total}G",
"format-icons":["\u2800","⡀","⣀","⣄","⣤","⣦","⣶","⣷","⣿"]
},
"cpu":{
"format":"<small>P</small>{icon}",
"format-icons":["\u2800","⡀","⣀","⣄","⣤","⣦","⣶","⣷","⣿"]
},
"backlight":{
"format":"<small>L</small>{icon}","tooltip-format":"Luminance: {percent}%","reverse-scrolling":true,
"format-icons":["\u2800","⡀","⣀","⣄","⣤","⣦","⣶","⣷","⣿"]
},
"wireplumber":{
"format":"<small>V</small>{icon}","tooltip-format":"Volume: {volume}%","reverse-scrolling":-1,
"format-icons":["\u2800","⡀","⣀","⣄","⣤","⣦","⣶","⣷","⣿"],
"on-click":"pavucontrol"
},
"network":{
"format-wifi":"<small>W</small>{icon}",
"format-ethernet":"<small>E</small>",
"tooltip-format":"{ipaddr}",
"tooltip-format-wifi":"{essid}\n{ipaddr}",
"format-linked":"<small>?</small>",
"format-disconnected":"<small>NC</small>",
"on-click":"iwgtk",
"format-icons":["\u2800","⡀","⣀","⣄","⣤","⣦","⣶","⣷","⣿"]
},
"mpris": {
"format":"<small>{title}</small>",
"tooltip-format":"{dynamic}",
"dynamic-order":["title","artist","album"],
"title-len":4,
"ellipsis":""
}
}
/*
https://docs.gtk.org/gtk3/css-properties.html
*/
@define-color k0 #222; /*背景*/
@define-color k2 alpha(@k0,.5);
@define-color k3 alpha(@k0,.2);
@define-color w0 #fff; /*文字色*/
@define-color w3 alpha(@w0,.2);
@define-color a alpha(#6ca,.5); /*アクセント*/
@define-color u alpha(#f44,.5); /*警告*/
*{
font-family:monospace,sans-serif;font-size:16px;color:@w0;transition:.2s;
margin:0;outline:none;border:none;padding:0;background:none;
box-shadow:none;text-shadow:none;-gtk-icon-shadow:none;
}
#waybar>box,tooltip,menu{margin:{{.gap}}px;margin-bottom:0;border:{{.border_width}}px solid;border-radius:{{add .border_radius .border_width}}px;background-color:@k2;border-color:@k3;}
tooltip>*{margin:{{mul .border_width 2}}px;}menu{padding:{{.border_width}}px;}
#waybar.battery-low>box{background-color:@u;}
.module,button,menuitem,separator,#tray>*{border-radius:{{sub .border_radius 2}}px;}
.module,menuitem{margin:2px;}radio{margin:8px;}
menuitem{padding:2px;}separator{padding:1px;}
button,#tray image{padding:0 8px;}.module>label,label.module{padding:0 4px;}
:hover,separator,radio{background-color:@w3;}
button.active,button.focused,radio:checked{background-color:@a;}
#tray>.needs-attention{background-color:@u;}
#battery.high.charging,#battery.high.full{background-color:@a;}
.muted,.paused,.stopped{opacity:.5;}
#taskbar,#tray{background-color:@w3;}
#workspaces{background-color:@k3;}
show=drun
width=480
height=480
prompt=launch...
normal_window=true
allow_images=true
insensitive=true
# single_click=true
# Code - OSSやDiscord を Waylandで起動する
# XXをElectronのバージョンで置換
--enable-features=WaylandWindowDecorations
--ozone-platform-hint=auto
--enable-wayland-ime
トラブルシュート
- VSCode(Code - OSS)がキーリングを認識しない
sed -E 's/\/\/.*//'|jq '.+={"password-store":"gnome-libsecret"}'
- mp3のサムネイル(id3)が表示されない
cat <<EOF | sudo tee /usr/share/thumbnailers/custom_mpeg.thumbnailer [Thumbnailer Entry] TryExec=ffmpegthumbnailer Exec=ffmpegthumbnailer -i %i -o %o -s %s MimeType=audio/mpeg EOF
- thunarのこの場所でターミナルを開くがだめ
sudo nano .config/xfce4/helpers.rc
を編集 - wofiでCLIアプリを選んでも起動しない
sudo ln -s /usr/bin/foot /usr/bin/gnome-terminal