Linux デスクトップの構築

ThinkPad T480 + Arch + GNOME で想像以上に快適になった。

利用用途にAdobe製品かXcodeがなければLinux機は全然ありだと思った。

(1) 要件

  • Windows 10 とのデュアルブート

(2) セットアップ手順

自分向けの備忘録用途なので駆け足にるが、初期設定の大まかな手順は下記の通り。細かな設定は ArchWiki を参照のこと。

  • (2-1) Windowsでarchに割り当てるパーティションを用意する。各種システム設定をオフにしないと C: パーティションを圧縮できない。
  • (2-2) ライブ環境をUSBメモリに書き込む。ISOファイルの書き込みには Rufus を用いた。
  • (2-3) デュアルブートに支障がでるのを防ぐためWindowsの高速スタートアップを無効化する。
  • (2-4) BIOSにてセキュアブートの無効化を行う。
  • (2-5) ライブ環境のArchを起動する。
  • (2-6) 用意したパーティションをext4でフォーマットして /mnt へマウントする。ここで諸々、最低限の base などのパッケージをマウント先へ入れておく。
  • (2-7) 起動時のマウント方針を /etc/fstab に設定する。詳しくは後述。
  • (2-8) 先ほどマウントした /mnt へ chroot する。
  • (2-9) デュアルブートできるよう GRUB でブートローダーを導入する。
  • (2-10) あとはパッケージマネージャーで好みのソフトウェアをインストールしていく。

電源を入れてブートできるようにするまではざっとこんなところ。ネットワーク速度にもよるだろうが、慣れれば20分とかからずに初期設定は完了する。

続けて、各項目を詳しく掘り下げて紹介しておく。

(2-1) パーティション作成

Windowsとのデュアルブートにあたって arch に割り当てるパーティションを作成しておく。
工場出荷時にはSSDの容量の大部分が Windows の C: に割り当てられているので、事前に C: パーティションを縮小のうえ別途パーティションを作成する [superuser.com]

  1. 各種システムプロセスを停止させる
    • Virtual Memory
    • System Restore
    • Search Indexer
    • Hibernation
  2. Windowsを再起動する
  3. Disk Management から C: パーティションを縮小する
  4. Disk Management にて arch に割り当てるパーティションを作成する(パーティション作成は arch 側でも行えるはず)

(2-4) BIOSの設定


ThinkpadでBIOS設定画面に入るには電源投入直後のLenovoロゴが表示されている間にエンターキーを押す。
セキュアブートはマイクロソフトが署名したバイナリのみの起動を許可する起動オプションであり、これを無効化するのはセキュリティ面で好ましくないため将来的に対処したい。

(2-5) いたれりつくせりのライブ環境

ライブ環境はホスト名にならってarchisoと呼ばれる。他のディストロでの初期設定に親しみがあるひとはarchisoの充実っぷりに驚くだろう。シェルはzshで補完は効くし、ネットワーク設定に至っては wifi-menu -o でアクセスポイントのスキャンから難読化されたパスワードの保存までやってくれる。つまりEthernetケーブルなしに初期設定を済ませられるということだ。これならCLIであることを除けばiPhoneでWiFiを繋ぐのと大差ない。まさにいたれりつくせりである。

なお、このライブ環境は後々マシンがハングする設定を入れてしまったときなどに利用できるのでメディアは初期化してしまわないようにしよう。たとえばデスクトップ環境の構築中などに設定を戻せない状況に陥ることがある。そういった場合、端末へUSBメモリを挿してライブ環境を起動してから、次のコマンド例のように /mnt をルートとしてへログインできる。

fdisk -l
mount /dev/nvme0n1p4 /mnt
wifi-menu -o
ping -c1 8.8.8.8
arch-chroot /mnt

(2-7) デバイスのマウント先を設定

起動時にどのように各ファイルシステムをマウントするかを設定しておく。

/etc/fstab

# /dev/nvme0n1p4
UUID=__YOUR_ROOT_FILE_SYSTEM__ / ext4 rw,relatime 0 1
# /dev/nvme0n1p1 LABEL=SYSTEM
UUID=__YOUR_BOOT_FILE_SYSTEM__ /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2

(2-9) ブートローダーの導入

UEFI環境でデュアルブートできるように GRUB のインストールおよび設定をおこなう。

※ライブ環境から編集したからかコマンド履歴が記録されておらず細かな経緯が定かではない。

/boot/loader/loader.conf

default arch
timeout 3
editor 0

/boot/loader/entries/arch.conf

title Arch Linux linux
/vmlinuz-linux initrd
/intel-ucode.img initrd
/initramfs-linux.img
options root=PARTUUID=__YOURS__ rootfstype=ext4 add_efi_memmap

(2-10) パッケージマネージャ

非公式パッケージは AUR で配られていて、2019-01-21時点でのデファクトスタンダードのマネージャーは yay だ。このあたりになると開発が停止しているパッケージを避けるスキルが求められる。複数の選択肢があるときにArchWikiは各種ツールを平等に紹介しがちだが、Google Trendsでの人気やGitHubの更新状況を参考に取捨選択をしよう。こういう過程を経ると構築した環境に愛着がでてきてしまう。

$ pacman -Qqe | wc -l
229

$ yay -P --stats
Yay version v9.0.1

Total installed packages: 911
Total foreign installed packages: 14
Explicitly installed packages: 229
Total Size occupied by packages: 9.7 GiB

Ten biggest packages:
davinci-resolve: 1.6 GiB
intellij-idea-ultimate-edition: 1.1 GiB
linux-firmware: 426.0 MiB
go: 404.4 MiB
noto-fonts-cjk: 294.3 MiB
noto-fonts-extra: 268.6 MiB
google-chrome: 193.1 MiB
nvidia-utils: 183.6 MiB
dropbox: 173.8 MiB
docker: 161.0 MiB

(3) デスクトップ環境

実際のところ、日ごろLinuxを快適に使うにあたってデスクトップマネージャーの完成度に負うところは大きい。そして GNOME (Xorg) を使い始めてみて気づいたのは「箱から取り出してすぐに使える」ソフトウェアだということだ。その有用性に比べて、トラブルシューティングに悩まされることは極めて少ない。

しかしそれでも多少の工夫は必要だったので書き下しておく。

  • (3-1) GPUドライバー: 本来はGNOMEのせいではないのだがGUIを動かそうとするときに問題に気づくので本項で言及する。今回セットアップした ThinkPad T480 が Intel オンボードグラフィックと NVIDIA GeForce MX150 を積んでいたのでどういう方針でドライバーを入れるべきかの判断に迷った。結局はこの連携は特に意識せず、ドライバーに任せることにした。さらに、新しいグラフィックボードの場合はOSSのドライバーがサポートできていないためプロプライエタリなドライバーを使うべきということもトラブルシューティングをしていて発見した。
[root@t480arch ~]# lspci -k | grep -A 2 -E "(VGA|3D)"
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07) Subsystem: Lenovo UHD Graphics 620 (ThinkPad T480) Kernel driver in use: i915
--
01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev a1) Subsystem: Lenovo GP108M [GeForce MX150] (ThinkPad T480) Kernel driver in use: nvidia
  • (3-2) 起動順序の衝突回避: 正直なところ根本原因は把握できていないが、デスクトップ環境の起動が systemctl start gdm では正常に立ち上がるのに systemctl enable gdm で起動対象に加えたときのみハングしてしまう状況に陥った。明らかにタイミングの問題でユニットが衝突を起こしていそうだったので systemctl edit gdm で起動の優先度を調整して対応した。この知見については GDM – ArchWiki にも追記した。
[Service]
Type=idle

(4) バックアップ

安心して環境構築を進めるにあたってバックアップを取得しておくことが望ましい。

個人で Dropbox Pro に加入していることもあり、システムバックアップを Dropbox にアップロードしている。モバイル端末から任意のファイルを .txt 形式でダウンロードすれば、出先で「あの systemd の設定どうしたっけ」という場合に手軽に確認できる。もちろんプレーンテキストで記述されている場合に限るが、意外と使い勝手はよい。

各種クラウドサービスに対応した rclone というクライアントがあるので、それを systemd のタイマーと連携させて日次でルートディレクトリ以下を sync させている。ありがたいことにDropboxはバージョン管理機能があるのでいざというときに履歴を参照できるのは心強い。

同期対象から外すべきディレクトリは rsync の記事が参考になった。実際の設定は backup-target.txt を参考のこと。

/etc/systemd/system/backup.service

[Unit]
Description=Backup
After=systemd-networkd-wait-online.service
Wants=systemd-networkd-wait-online.service
[Service]
Restart=on-abnormal
ExecStart=/usr/bin/rclone sync --skip-links --filter-from /root/dotfiles/.t480arch/backup-target.txt / mine:backup
; Limit the number of file descriptors; see man systemd.exec for more limit settings.
LimitNOFILE=1048576
LimitNPROC=512
; Use private /tmp and /var/tmp, which are discarded after rclone stops.
PrivateTmp=true
; Use a minimal /dev (May bring additional security if switched to 'true', but it may not work on Raspberry Pi's or other devices, so it has been disabled in this dist.)
PrivateDevices=true
; Make /usr, /boot, /etc and possibly some more folders read-only.
ProtectSystem=full
NoNewPrivileges=true

/etc/systemd/system/backup.timer

[Unit]
Description=Daily backup
[Timer]
Unit=backup.service
OnCalendar=daily
Persistent=true
RandomizedDelaySec=5min
[Install]
WantedBy=timers.target

(5) システムの更新

隔週でpacman -Syuするようリマインダーを設定した。こういったライフサイクル全般に渡って wiki が充実しているのが素晴らしい。

(6) キーマッピング

フォーラムなどでも詳細な input method の質問をしているのは中国系や日系のユーザーが多い。先人への敬意を胸に荒野を切り拓いていこう、同士たちよ。

そもそもLinux向けデスクトップのアプリケーションではショートカットがWindows風味になっており(恐らくキーマップ由来)、例えばIDEではファンクションキーが多用される。ホームポジションから遠くブラインドタッチしづらいが慣れるしかないと考えている。

それ以外のキーマップに関わる設定は mooz/xkeysnail を利用している。これは Mac でいう Karabinar 相当のことをさせるデーモンシステムである。動作に管理者権限を求めるのが良くない点としてあげられているものの、それを言ってしまえばKarabinarにも管理者権限は渡しているので気にしないことにしたい。影響範囲をせばめるため、カーネルからudevの権限を割り当てたグループを用意して、そこへ所属させた専用ユーザーを作成してxkeysnailコマンドのみを許可している [qiita.com]

日本語の HENKAN_Mode, MUHENKAN をマッピングしてもそれだけでは動作しなかったので xbindkey と組み合わせた。GNOMEの標準であるIBUSをIMEのフレームワークに使っているが(切り替えようとして挫折した)、下記設定で期待通りに動作した。

~/.xbindkeysrc [dotfiles]

"(ibus engine xkb:us::eng)"
m:0x0 + c:102
Muhenkan

"(ibus engine mozc-jp)"
m:0x0 + c:100
Henkan_Mode

(7) 今後のお楽しみ

カスタマイズの積み残しはいくつかある。

  • (7-1) フィンガープリント
  • (7-2) ウインドウマネジャー
    • 評判のいい i3wm を試してみたい。

(8) コミュニティへの貢献

ArchにしてもGnomeにしても、ユーザーコミュニティの活発さが頼もしい。貢献したい気持ちにさせられる。

まず思いつくのは自分が利用している AUR のメンテナンスや wiki の更新などだが、さらにハードルの低い貢献手法もある。金銭の寄付だ。手っ取り早く関わるには寄付をしよう。

(9) おまけ

あるあるネタを楽しむための付録。

  • 最初の頃は、どうしても pacman を packman にタイポしてしまう。
  • 公式のパッケージでも 404 になりがち。数日待てば直っているが、こういう不具合はコミュニティへの貢献の機会と捉えていきたい。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中