6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ArchLinuxにHyprlandを入れる

Last updated at Posted at 2024-01-22

𝑨𝒓𝒄𝒉 𝑳𝒊𝒏𝒖𝒙 𝑯𝒚𝒑𝒓𝒍𝒂𝒏𝒅 𝑰𝒏𝒔𝒕𝒂𝒍𝒍 𝑩𝒂𝒕𝒕𝒍𝒆

目的

  • デュアルブート
    • 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

以下を書き足せば最低限使える状態にはなる

.profile
export PATH=$PATH:$HOME/.local/bin
export XMODIFIERS=@im=fcitx
.config/hypr/hypridle.conf
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
}
conf .config/hypr/hyprland.conf
# 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
.config/hypr/hyprlock.conf
general {
	hide_cursor = true
	grace = 5
}

background {
	path = screenshot
	blur_size = 8
	blur_passes = 1
}
.config/waybar/config.jsonc
{
	"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":""
	}
}

.config/waybar/style.css
/*
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;}
.config/wofi/config
show=drun
width=480
height=480
prompt=launch...
normal_window=true
allow_images=true
insensitive=true
# single_click=true
.config/electronXX-flags.conf
# 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
    
6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?