Manjaro Linux - KDE Plasma
設定のメモなどです。
Windows10が最後のWindowsと信じて使ってきましたが、Windows11へのアップグレードができない(CPU のクロックが低いためらしい)ので Linux への乗り換えを検討しています。
しらべてみると、Manjaro Linux がよさそうです。パッケージマネージャーの pacman は Windows の Msys2 で使ったことがありますし。
Manjaro の公式版は Plasma, GNOME, Xfce の3種類ですが、Plasma Fullバージョンをダウンロードしてみました。Windows上の Rufus でダウンロードしたISOファイルからLiveUSBが簡単に作れます(使ってみたら Ventoy 便利です)。
ちなみに、Xfce でウインドウのリサイズが難しいときは XFCEでのウィンドウサイズ変更が鬼のように難しい によると「Alt + 右クリック」でサイズ変更できるそうです。
「KDE の問題の多くは設定に関係しています。」KDE 設定関連の問題(ArchWiki) と書いてあるように Plasma は設定がややこしいデスクトップ環境といえるかもしれません。
2024-02-28 に KDE community による MegaRelease で Plasma 6 がリリースされました。Manjaro では 2024-05-13 から Plasma 6.0.4 になりました。Plasma 6 では X11 に代わって Wayland が標準のはずです。自分は Plasma 6 を待ちきれずに Wayland に変えていたので、日本語入力(fcitx5 + mozc)の設定ができましたが、これが Manjaro の標準的な設定方法になるかは分かりません。Wayland セッションでは画面が数十秒間固まることがありますが自分だけの問題かもしれません。
2024-05-13 の大型アップデート(自分の場合、約1.9GBのダウンロードとなりました)で Plasma 6.0.4 になりました。KDEシステム設定 も構成が変わってしまいました。KDE システム設定 → 外観とスタイルのウィンドウの管理 → デスクトップ 効果に 魔法のランプ(ジニーエフェクト)があります。ぐらぐらウィンドウもあり、まさに柔らかいウィンドウオペレーションが可能になりました。グローバルテーマは Manjaro は Breath、KDE は Breeze を推してるようです。今までの設定をリセットする意味もあって Breeze Dark に変えました。
2024-05-29 の大型アップデート(自分の場合、約1.5GBのダウンロードとなりました)で Plasma 6.0.5 になりました。
2024年9月上旬に、manjaro-kde-24.0.7-240821-linux69.iso をダウンロードして live usb を試してみました。驚いたことに、Plasma 6.0.5 で X11 になっていました。Wayland(KWin)はバグがあるから X11 になっていると思われます。「Plasma 6 からは Wayland が標準」と思っていたのに。KDEシステム設定 で自動ログインを X11 に戻すことはできないそうです。これではまるで孫子兵法「はしご外し」です。しかし「はしご外し」は味方を奮闘させるための方策ですから、Wayland(KWin)を使い続けるべき、と判断しました。ところが、wayland と X11 のどちらをログインの時に選択しても、日本語入力できることに気が付いたので、両方使うことにしました。
Plasma 6.1.3 Complete Changelog には KWin で Wayland: add error handling for QFile::open failure in org_kde_plasma_window_get_icon. といいうのがあったので、やはりアイコン関係にバグがあったようです。アップグレードに期待したいです。各ブランチでのバージョンは Branch compare for Manjaro でみれます。
2024-10-01 の Stable Update で Plasma 6.1.5 になりました(自分の場合、1885.21 MiBのダウンロードとなりました)。Wayland(KWin)ではファイルマネージャの Dolphin でプレビューアイコンを表示しているとたまにフリーズする現象はまだあります。しかしプレビューアイコンを表示しなければ、使えるようになってきたのではないかと思ってます。(でも、アプリの起動時にフリーズすることがあります。X11で十分軽く動作してると思います。)
2024-11-30 の Stable Update で Plasma 6.2.4 になりました。自分の場合、合計ダウンロード容量: 2070.20 MiB です。Wayland ではまだフリーズする現象がありますが、以前に比べるとだいぶよくなったような気がします。アイコンプレビューで落ちるのはなくなったのでは。
pacman/ヒントとテクニック を参考にして、
孤立したパッケージとその設定ファイルを再帰的に削除するには:
pacman -Qdtq | sudo pacman -Rns -
を実行してみたら、gnome-shell などが削除されました。そしたらなんだか調子いいです。スリープからの復帰も問題なくなりました。でもたまにフリーズしてます。
Plasma の軽くて柔らかいユーザーエクスペリエンスは、パソコン作業による疲労を軽減していると思います。
こんどこそ、不退転の覚悟を持って Wayland化を進めようと決めました。
2025-02-04 の Stable Update で Plasma 6.2.5 になりました。自分の場合、合計ダウンロード容量: 2024.99 MiB です。それとカーネルが6.13に。libva を旧版にしてみました。LIBGL_ALWAYS_SOFTWARE=true としてGPUを使わないと安定するようです。
KDEシステム設定 で スペルチェック のすべてのオプションのチェックをはずしました。
ビデオプレーヤーの vlc が2024-02-04にアップデートされました。ますますおかしくなったような気がしましたが、設定をリセットすればよくなります。設定画面の下側にある「設定をリセット」から再設定したほうがいいです。入力 / コーデック の設定で ハードウェアアクセラレーションによるデコード で 無効 を選択します。
xwaylandvideobridge をアンインストールしました。
sudo pacman -Rs xwaylandvideobridge
アプリの起動時にマウスポインタの近くに現れるぴょんぴょん跳ねるアイコンがトラブルを起こすことがたまにあるので無効にしました。KDEシステム設定の「外観とスタイル」の「色とテーマ」から「カーソル」を選ぶと「起動フィードバックを設定(C)」があるので「カーソルフィードバック:」で「なし」を選択して「適用(A)」をクリックします。(その後ぴょんぴょんアイコンを復活させました)
2025-03-05 Stable Update で Plasma 6.3.2 になりました。ダウンロード容量は約1684 MiBでした。
2025-03-18 Stable Update で Plasma 6.3.3 になりました。ダウンロード容量は約1338 MiBでした。
2025-03-24 Stable Update がありました。ダウンロード容量は約480 MiBでした。LIBGL_ALWAYS_SOFTWARE=true の設定をしなくてもフリーズしなくなったようです。
2025-03-30 Stable Update があり、自分の場合ダウンロード容量は約632 MiBでした。実はカーネルのアップグレードに失敗してシステムが起動せず。LiveUSBで起動して chroot と pacman でカーネルをインストールして 6.14 になりました。また GTK でカーソルが巨大化する問題も修正されました。
2025-04-12 Stable Update で Plasma 6.3.4 になりました。ダウンロード容量は約1020 MiBでした。
2025-05-04 Stable Update がありました。ダウンロード容量は約1257 MiBでした。vainfo をやってみるとおかしくなってました。それで libva は最新版をインストールしました。
2025-05-14 Stable Update で Plasma 6.3.5 になりました。ダウンロード容量は約1649 MiBでした。
2025-05-19 Stable Update がありました。ダウンロード容量は約990 MiBでした。Libreoffice(AppImage版)が起動しなくなりました。
libreoffice24.8: error while loading shared libraries: libxml2.so.2: cannot open shared object file: No such file or directory
extra/libxml2-legacy 2.13.8-1 をインストールしました。(Arch - libxml2.so.2 is missing)
2025-06-23 Stable Update がありました。ダウンロード容量は約1600MiBでした。カーネルは6.15へ、Manjaro 25.0 Zetar になりました(これは誤解で Zetar になったのはもう少し昔のようです)。日本語入力で変換候補ウインドウが画面左上のいつも同じ位置にでるようになりました。対処法はわかりません。
2025-07-12 Stable Update で Plasma 6.3.6 になりました。ダウンロード容量は約1656 MiBでした。linux-firmware が小さなパッケージに分割されました。vlc もプラグインに分割されたそうです。(Split the package based on plugins with external dependencies )
/etc/profile.d/input-support.sh のコメントの下の2行をコメントアウトしました。 ログインしたときにWayland 診断のダイアログがでてしまいます。ただし、クラッシクUI にするべき理由があるのかもしれません。日本語入力で変換候補ウインドウの位置の問題はなくなりました。
/etc/profile.d/input-support.sh
# change from waylandui to classicui.
#export QT_IM_MODULE=$im
#export GTK_IM_MODULE=$im
カーネルの新たな提案パッケージをインストールしてみました。
sudo pacman -S --asdeps scx-scheds
2025-07-18 Stable Update がありました。ダウンロード容量は約226 MiBでした。
2025-07-20 Stable Update がありました。ダウンロード容量は約647 MiBでした。
perl 5.42(2025年7月3日リリース)がトラブルを起こしてるようです。clamtk が起動しません。 その他の自作スクリプトも動かないのがあります。perl5420delta - perl v5.42.0 での変更点 をみてもよくわかりません。とりあえずホームにあるフォルダ ~/perl5 を(いつでも元に戻せるように)リネームしてみると問題なくなるようです。~/.bash_profile の中のperl関係をコメントアウトもしておきました。(cpanm でインストールしたモジュールを再インストールするべきかも)
2025-08-11 Stable Update がありました。ダウンロード容量は約1621 MiBでした。それとカーネルが 6.16.0 へ。
2025-08-29 Stable Update がありました。ダウンロード容量は約1257 MiBでした。
2025-08-30 Stable Update がありました。ダウンロード容量は約609 MiBでした。
さらば Flatpak, Snap, Firejail, Bubblejail, AppArmor。これらは使わないことにしてアンインストールしました。AppImage と bubblewrap があればそれでいいです。
GitHub がおかしいです。ダウンロードが失敗します。
# curl でダウンロードすると次のメッセージが出て止まりました。
curl: (92) HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)
# wget では次のメッセージが出て止まりました。
HTTP による接続要求を送信しました、応答を待っています... 618 jwt:expired
GitHubのReleasesページから大きいファイルをダウンロードしようとしたら失敗(618 jwt:expired)したが回避策を見つけた によると時間で切られてるようです。次のようにレジュームするコマンドを何回か実行することでダウンロードできました。
curl -C - -L -O https://github.com/ungoogled-software/ungoogled-chromium-portablelinux/releases/download/140.0.7339.127-1/ungoogled-chromium-140.0.7339.127-1-x86_64.AppImage
2025-09-26 Stable Update がありました。ダウンロード容量は約1467 MiBでした。使っていないカーネル linux615 がアンインストールできない状態が続いているのですが… linux615 はアンインストールできたのですが、linux617 をインストールしたら linux616 がアンインストールできないです。
まったく使っていなかった pamac をアンインストールしました。ESP を /boot にマウントするように変えました。
[Stable Update] 2025-12-08 - 25.1 Anh-Linh Preview ダウンロード容量は約2547 MiBでした。Plasma 6.5.3 になりました。linux616 はなにかに置き換えられました。ちゃんと動いてます。X11セッションを使ってるユーザーはパッケージ plasma-x11-session をインストールしないとログインできなくなるとか書いてありますね。
Plasma 6.5 では $DESKTOP_SESSION が変わりました。Waylandセッションの場合は plasma で x11セッションの場合は plasmax11 です。/etc/sddm.conf.d/kde_settings.conf で [Autologin] の Session=plasmawayland を Session=plasma に書き換えたほうがいいです。x11セッションで自動ログインする場合は Session=plasmax11 にします。/etc/profile.d/input-support.sh で $DESKTOP_SESSION を使ってる場合も書き換えの必要があるかもしれません。
[Stable Update] 2025-12-15 - Kernels, NVIDIA, Plasma, Cosmic, Firefox ダウンロード容量は約747 MiBでした。Plasma 6.5.4 になりました。
[Stable Update] 2025-12-22 - Kernels, Cinnamon, KDE Frameworks, Pacman ダウンロード容量は約644 MiBでした。カーネルが linux618 になりました。
パッケージ linux-meta をアンインストールしました。これは2つ以上のカーネルを入れるな、という意味なのでしょうか? そして古いカーネル linux617 もアンインストールしました。ユニファイドカーネルイメージでブートすることにしました。GRUB もアンインストールです。
sudo pacman -Rsn grub-btrfs grub-theme-manjaro install-grub update-grub grub
パッケージ plasma-x11-session があると Waylandセッションが不安定になるようです(本当か?)。x11 は使わないことにしてアンインストールしました。
[Stable Update] 2026-01-04 - Manjaro 26.0, Mesa, Firefox, LibreOffice, COSMIC ダウンロード容量は約476 MiBでした。
[Stable Update] 2026-01-13 - Kernels, KDE Gear 25.12.1, Haskell, Mesa ダウンロード容量は約401 MiBでした。
[Stable Update] 2026-02-01 - Kernels, COSMIC, Plasma, GNOME, Mesa ダウンロード容量は約1830 MiBでした。vi が ex-vi-compat に置き換えられ、vim がインストールされました。Plasma 6.5.5 になりました。
マイクロコード
マイクロコード(ArchWiki) によると「Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、早期ロードが必須です。」とあるので Braswell もかなり危ないという感じがします。/boot/amd-ucode.img または /boot/intel-ucode.img を「initramfs の先頭に追加する」のがいいそうです。具体的には、
/etc/mkinitcpio.conf
HOOKS=(microcode base udev autodetect modconf kms block keyboard keymap consolefont plymouth filesystems fsck)
のように HOOKS 配列の先頭に microcode を付け足す(または移動させて)それから sudo mkinitcpio -P すればよさそうです。ですがこの変更は取り消すことにしました。
Google パスキー
Google への Google-chrome からスマホ(Android ですが)を使ったパスキーでのログインを試してみました。
- Googleにログインして Googleアカウントの管理 → セキュリティ → 2段階認証プロセス → 本人確認 → 2段階認証プロセスを有効にする パスキー自体はすでにスマホで作られていました。
- スマホで 設定 → セキュリティ → 画面ロック PIN 顔認証などの設定。
- スマホとパソコンとで Bluetooth、ペアリングの設定、接続。
パソコンのchromeでGoogleでログインするときに、別の方法を試す → パスキーを使用 で 出てきたQRコードをスマホで撮影 ブラウザで表示などを選択、PIN 入力など。でログインできました。スマホにはQRコード読み取りアプリを入れておいたほうが便利なようです。chromium, vivaldi でも同様にログインできました。
FIDO
FIDO(ファイド)は、Fast IDentity Online(素早いオンライン認証)の略語で、従来のパスワードに代わるとみられている認証技術のひとつ。業界標準になるとみられている。
FIDO (認証技術)
Password Manager
「Linux」向けパスワードマネージャー5選--ログイン情報を安全かつ簡単に管理 を読んで Buttercup を使おうかと思いましたが開発が終了してるようです(The Buttercup project is coming to an end)。Bitwarden はほぼ無料で、クラウドにデータが保存されるので環境間で共有が簡単です(使い方は 【2025年10月最新】Bitwardenの使い方を徹底解説!IDとパスワード登録の手順も紹介)。 KeePassXC は完全無料でローカルにデータを保存します(クラウドに保存して共有する方法は KeePass を使う)。
Bitwarden と KeePassXC を Firefox で試してみましたが、Bitwarden は ID の入力が少し面倒です。KeePassXC を使うことにしました。
グラフィックドライバー
本来は必要ないのですが /etc/environment でグラフィックドライバーを指定しました。値は自分の環境のものです。
/etc/environment
MESA_LOADER_DRIVER_OVERRI=iris
LIBVA_DRIVER_NAME=i965
VDPAU_DRIVER=va_gl
GSK_RENDERER=vulkan
#GSK_RENDERER=ngl
#GSK_RENDERER=gl
OpenGL
MESA_LOADER_DRIVER_OVERRIDE 環境変数は OpenGL(ArchWiki) と Mesa 3D の Supported Drivers に説明があります。自分の場合は iris です。/lib/dri/${MESA_LOADER_DRIVER_OVERRIDE}_dri.so が使われます。eglinfo -B で確認できます。
ソフトウェアラスタライザを使うには、~/.bash_profile に加えます。Mesa 3D Environment Variables に他の環境変数の説明があります。
~/.bash_profile
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
export LIBGL_ALWAYS_SOFTWARE=true
export GALLIUM_DRIVER=llvmpipe
#export GALLIUM_DRIVER=softpipe
fi
VA-API
LIBVA_DRIVER_NAME 環境変数は ハードウェアビデオアクセラレーション(ArchWiki) VA-API の設定 にあります。ノートの部分とその上の確認のところを参考にしてください。自分の場合は i965 です。/usr/lib/dri/${LIBVA_DRIVER_NAME}_drv_video.so が使われます。
intel の GPU の世代のリストが List of Intel graphics processing units にあります。第8世代(Gen8)は Braswell (Gen8LP) と Broadwell (Gen8) の2種類です。
- Coffee Lake (2017) までの GMA 4500 (2008) は libva-intel-driver で i965
- Broadwell (2014) とそれ以降の HD Graphics シリーズ は intel-media-driver で iHD
この説明はまちがいか、あるいは GPU の世代が想像以上にややこしいかのどちらかと思われます。自分の場合 Braswell (Pentium N3700) ですが、指定しなければ iHD が選択され vainfo でエラーがでます。i965 を指定すると X11セッションでは vainfo にエラーは出ません。
wayland セッションでは i965 を指定しても vainfo(libva-utils パッケージに含まれています)で確認するとエラーがでます。
$ vainfo
Trying display: wayland
error: failed to resolve wl_drm_interface(): /usr/lib/libEGL_mesa.so.0: undefined symbol: wl_drm_interface
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: Intel i965 driver for Intel(R) CherryView - 2.4.1
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
libva の Waylandサポートが壊れてるそうです。バグ修正版をまつことにします(intel / libva)。
VA-API に i965 を使わなければならない古いCPUの場合、Wayland では VA-API をあきらめたほうがよさそうです。vlcの設定は入力/コーデックで ハードウェアアクセラレーションによるデコード を無効にして、高速シーク をチェックします。
自分の環境では VA-API と VDPAU を無効にしたほうが安定するようです。
~/.bash_profile
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
export LIBVA_DRIVER_NAME=""
export VDPAU_DRIVER=""
fi
VDPAU
VDPAU_DRIVER 環境変数は ハードウェアビデオアクセラレーション(ArchWiki) VDPAU の設定 にあります。自分は Intel graphics なので va_gl です。/usr/lib/vdpau/libvdpau_${VDPAU_DRIVER}.so が使われます。vdpauinfo で確認できます。
Vulkan Video
$ vulkaninfo | grep VK_KHR_video_
MESA-INTEL: warning: ../mesa-25.1.4/src/intel/vulkan_hasvk/anv_device.c:1292: The kernel reported a GTT size larger than 2 GiB but not support for 48-bit addressesi
GTK
GSK_RENDERER 環境変数は GTK(ArchWiki) と Running and debugging GTK Applications を参考にしてください。自分は標準の vulkan にしました。
Xorg
インテルグラフィックス(ArchWiki) を読んでみると、推奨されない intel ドライバー(xf86-video-intel)を使う設定になっていることに気が付きました。/etc/X11/xorg.conf.d/20-intel.conf に次のように書き込んで modesetting ドライバー(xorg-server)を使う設定にしました。MODESETTING(4) と xorg.conf(5) に文書があります。
/etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
Identifier "Intel Graphics"
Driver "modesetting"
EndSection
Windows11 へのアップグレード
Windows 11非対応の古いパソコンに最新版「24H2」アップデートを適用する方法 によると「そのようなWindows 11非対応パソコンでも、最小システム要件のチェックを回避して、無理やりWindows 11にアップグレードする方法があります。 実はこれ、Microsoftが公式に発表した方法なのですが、レジストリを変更する必要があり、それなりのスキルがないと難しい方法でした。」ということで、要件のチェックを回避してアップグレードしてもいいと Microsoft がいってるようなのです。やってみることにしました。
Clonezilla で Windows10 がインストールしてあるディスクのディスクイメージを保存しておきます。Windows 11 のダウンロード から Win11_24H2_Japanese_x64.iso をダウンロードしてきます。Rufus 4.7以上をダウンロードして、Rufus 4.7でWindows 11 24H2手動更新成功 を参考にしてインストールUSB をつくってインストールしました。Windows10 22H2 から Windows11 24H2 へのアップグレードができました。しかし、数分でスリープを繰り返してしまいます。これはこのPC固有の問題かもしれません。スリープしない設定にすることでなんとか使えます。ファイルマネージャーが重いです。ウィジェットが勝手にインターネットからニュースをダウンロードします(止める方法はあるはずですが)。windows11 の設定からの Windows Updates も失敗しました。なのでClonezillaで Windows10 22H2 に戻しました。
Link
- Manjaro Homepage
- Manjaro Forum
- Manjaro Wiki
- Manjaro Discover Software
- Manjaro Linux JP Manjaro Linux JP2
- Plasma - KDE Community
- Xfce デスクトップ環境
- GNOME
- KDE Applications
- Apps for GNOME
- KDE(ArchWiki)
- ArchWiki
- ArchWiki JP
- アプリケーション一覧(ArchWiki)
- KWin
Plasma版 インストール直後の設定
Wi-Fi のパスワード入力後に KWallet(KDE Wallet)の設定を要求するダイアログが出た場合は、「Classic, blowfish encrypted file」を選択して(とりあえず)パスワードを入力しない。警告も無視していいようです。(自動ログイン時のKDEウォレットの設定)
# Windows で起動したときに時計がくるわないようにする
sudo timedatectl set-local-rtc true --adjust-system-clock
# pacman のミラーを日本サーバーに
sudo pacman-mirrors -c Japan
# データーベースの更新とアプグレード(時間がかかります。1GB以上のダウンロードが必要でした)
sudo pacman -Syu
# 日本語入力のインストール
sudo pacman -S manjaro-asian-input-support-fcitx5
sudo pacman -S fcitx5-mozc
# AUR(Arch User Repository)ヘルパーのインストール
sudo pacman -S base-devel
sudo pacman -S yay
Arch Linuxの日本語入力をfcitxからfcitx5に切り替えるによると、fcitx5-mozc のインストールのとき、「パッケージの選択を聞かれるので、デフォルトの“all”でインストールします。」と書いてあるので Manjaro でも同じく all でよさそうです。
Linux:RAMディスクを使ってアクセスを高速化 によると /home/ユーザ/.cache を tmpfs(ArchWiki) でramに配置することができます。再起動するとデータは消えますが、Firefox も高速化されます。
sudo nano /etc/fstab
/etc/fstab に次の行を書き足します(USERは置き換える)。作業用に自由に使える Ram もつくることにしました。
tmpfs /home/ユーザ/.cache tmpfs defaults,noatime,uid=USER,gid=USER,mode=0777,size=4G 0 0
tmpfs /home/ユーザ/Ram tmpfs defaults,noatime,uid=USER,gid=USER,mode=0777,size=4G 0 0
再起動すると有効。df -h や findmnt で確認できます。
KDEシステム設定 を開くと「クイック設定」で Breath Dark にすることができます。外観とスタイル の テキストとフォント → フォント でフォントサイズの調整などできます。Noto Sans でもいいのですが音引き「ー」の曲がった感じに違和感があるので、源ノ角ゴシックにしました。が、IPAexゴシック(等幅はIPAゴシック)に変えました。入力/出力デバイス の ディスプレイとモニタ で Global scale: 125% にしました。
IME
Shiftキーを短く押すことで入力メソッドの切り替えができるなんて今まで知りませんでした。でも誤操作の原因になってしまうので使わないことにしました。KDEシステム設定 → 言語と時刻 の 入力メソッド → 入力メソッド → グローバルオプションを設定… に進みます。
入力メソッドの切り替え: ハングル を削除
一時的に第1入力メソッドに切り替える: 左 Shift を削除
次の入力メソッドに切り替える: Control+左 Shift を削除
前の入力メソッドに切り替える: Control+右 Shift を削除
入力メソッドを有効にする: ハングル Hanja を削除して 変換 にする
入力メソッドをオフにする: ハングル Romaja を削除して 無変換 にする
適用(A) をクリックする
mozc
mozc(ArchWiki) のUT辞書版が強く推奨されています。
- KDEシステム設定 → 言語と時刻 の 入力メソッド → 入力メソッド と進んで グループが default になっていることを確認。「+入力メソッドの追加」を押して mozc を追加
- 「グローバルオプションのを設定」で 動作 の「デフォルトで有効にする」をチェックする。入力メソッドを有効にする:に変換キーを加える。「適用」をクリックする。
- 1つ戻って、mozc の設定アイコンをクリック、「初期モード」を直接入力にして、「候補を縦に並べる」をチェックする。「適用」をクリックする。
mozc の設定ツールを開いて、キー設定を MS-IME を選択、編集で 変換キーでIMF有効、無変換キーでIMF無効にするなど設定しました。半角英数字は mozc の直接入力モードで入力するのが基本になります。
# MS-IMEのキー設定より削除する項目
変換前入力中 Hiragana ひらがなに入力切替
変換前入力中 Katakana 全角カタカナに入力切替
変換前入力中 Muhenkan ひらがな・カタカナを切替
変換前入力中 Shift Muhenkan 全角英数に変換
変換中 Hiragana ひらがなに入力切替
変換中 Katakana 全角カタカナに入力切替
変換中 Muhenkan ひらがな・カタカナを切替
入力文字なし Hiragana ひらがなに入力切替
入力文字なし Katakana 全角カタカナに入力切替
入力文字なし Muhenkan 次のかな文字種に入力切替
# 追加する項目
変換前入力中 Hiragana 全角カタカナに変換
変換前入力中 Muhenkan 半角英数に変換
変換前入力中 Shift Muhenkan 全角英数に変換
変換中 Hiragana 全角カタカナに変換
変換中 Muhenkan 半角英数に変換
変換中 Shift Muhenkan 全角英数に変換
直接入力 Henkan IMEを有効化
入力文字なし Muhenkan IMEを無効化
半角カタカナはあまり使わないので F8 でいいかと。
エディッタの Kate を使っていて、テキストを選択したあと 変換キー を押すと再変換できることに気が付きました。さらに、Ctrl+v でペーストした直後も 変換キー を押すと再変換できます。これはかえって不便かもしれません。Shift Henkan に変更しました。
# 変更前
入力文字なし Henkan 再変換
# 変更後
入力文字なし Shift Henkan 再変換
キー設定はエクスポートできますが、英語になってしまいます。こぶり主義 Google日本語入力の研究 によると
変換前入力中 Composition
変換中 Conversion
直接入力 DirectInput
入力文字なし Precomposition
サジェスト選択中 Prediction
サジェスト表示中 Suggestion
fcitx5-mozc-with-jp-dict
Manjaro Linux 最初の一歩 によると SudachiDict をシステム辞書に組み入れた fcitx5-mozc-with-jp-dict のビルド済みパッケージが manjaro-jp レポジトリ と manjaro-jp sourceforge ミラー に公開されています。aur/fcitx5-mozc-with-jp-dict もありますが、こちらはビルドしなくてはなりません。
ビルド済みパッケージから pacman でインストールするには、鍵の追加が必要です(pacman/パッケージの署名)。kyeid = 57B49CC5AA4F00FC のインポート、署名をします。(それと関係者の皆様への感謝の気持ちも忘れずに。)
# 鍵のインポート
sudo pacman-key --recv-keys 57B49CC5AA4F00FC
# フィンガープリントを確認
pacman-key --finger 57B49CC5AA4F00FC
# インポートした鍵をローカルで署名
sudo pacman-key --lsign-key 57B49CC5AA4F00FC
# ダウンロードは sourceforge の方がよさそうです。ファイル名は上記レポジトリで確認してください。
sudo pacman -U https://manjaro-jp.sourceforge.io/manjaro-jp/fcitx5-mozc-with-jp-dict-3.33.6079.2-5-x86_64.pkg.tar.zst
# または
sudo pacman -U https://mirror.phoepsilonix.love/manjaro-jp/fcitx5-mozc-with-jp-dict-3.33.6079.2-5-x86_64.pkg.tar.zst
yay を使うと、更新されていれば AUR版をインストールしようとするので、/etc/pacman.conf の [options] に書き加えたほうがいいかもしれません。
[options]
IgnorePkg = fcitx5-mozc-with-jp-dict
mozc のユーザー辞書として取り込む方法もあるそうです。
Mozcdict-Ext
Anthy
fujiwarat / anthy-unicode は軽量で高速なかな漢字変換ソフトです。X11および Emacs 上で動作するそうですが、Wayland でも動作するようです(Xwayland ということでしょうか)。Anthy個人辞書管理ツール「霞」( fujiwarat / kasumi-unicode, aur/kasumi-unicode ) ですが、yay でインストールしようとすると「ビルド時にエラー」といって失敗しました。aur/kasumi-git のほうがいいのかもしれません。しかしこれも「ビルド時にエラー」といって失敗しました。
$ sudo pacman -S fcitx5-anthy
$ anthy-dic-tool --dump --utf8
Anthyの辞書登録 が参考になりそうです。それと Anthyの辞書ファイル(1) がありました。
KDEシステム設定 の 入力メソッド で Anthy の設定ができます。
無変換キーで半角英数入力、変換キーでひらがな入力にする方法です。ひらがなモード: の右側の + をクリックすると … になるので 変換キー を押します。 すると 変換 が設定されます。同様に 英数モード: を 無変換 に設定します。シンボルには半角文字を使用する: と 数字には半角文字を使用する:、のチェックをはずします。テンキータイプ: をハーフにします。適用(A) ボタンをクリックします。
入力方式 で Nicola というのは親指シフトキーボードでの入力用とのことで、そんなキーボード持ってないのでしょうがありません。
Anthyの珍変換 を読んでみると、Anthyを使うなら短めに変換するのがよさそうです。
SKK
SKK は東北大学の佐藤雅彦教授によって開発された形態素解析を行わない日本語入力メソッドです。SKK(ArchWiki)、ホームページは SKK Openlab です。SKK(ニコニコ大百科)に説明があります。
$ sudo pacman -S fcitx5-skk
KDE システム設定 → 入力メソッド → +入力メソッドを追加… → SKK を選択 → +追加 → 適用(A)
使い方としては基本はローマ字入力ですが、漢字にする部分の先頭をシフトキーを押して入力します。漢字の部分の入力が終れば、送り仮名があればその先頭をシフトキーを押して入力し、なければスペースキーを押します。カタカナに変換する場合も最初の文字はシフトキーを押して入力し、カタカナの部分を入力し終えたら q を押します。Emacs と同様に Ctrl+g でキャンセルできます。「シンプルかつ流れるような変換が可能になっている」そうですが本当でしょうか。
- ひらがなモード Ctrl+j
- カタカナモード q
- 全英モード シフトキー+l
- アスキーモード l
- 半角カナモード Ctrl+q
KKC
ueno / libkkc は N-gram 言語モデルを使って多少複雑な方法で連文節変換を行います。
$ sudo pacman -S fcitx5-kkc
Hazkey
Manjaro Linux 最初の一歩 で紹介されていた 7ka-Hiira / fcitx5-hazkey です。ホームページは Hazkey です。iOS用の azooKey が使われているそうで、Linux での次期主力IMEになるかもしれません。学習機能が使えるようになってました。
yay -S fcitx5-hazkey-bin
- F6キー / Ctrl+U: ひらがな
- F7キー / Ctrl+I: 全角カタカナ
- F8キー / Ctrl+O: 半角カタカナ
- F9キー / Ctrl+P: 全角英数字
- F10キー / Ctrl+T: 半角英数字
Wayland
- Wayland(ArchWiki)
- Using Fcitx 5 on Wayland (KDE Plasma)
- KDE Plasma の Wayland セッションで日本語入力
- Fcitx5(ArchWiki)
- KDE(ArchWiki)
- KWin
Wayland はディスプレイサーバープロトコルです。X Window System (X11) に代わって標準になるそうです。「ネイティブな X11 アプリケーションをシームレスに動かすための後方互換性として、Xwayland を使うことができます。これは Wayland に X サーバを提供します。」
「通常、Wayland のネイティブな text-input プロトコルでは、インプットメソッドモジュールよりも良い結果を得られます。」と書いてあったので Wayland に切り替えることにしました。Plasma 6 になると Wayland が標準になるそうです。
X11 でログインしている場合は、ログアウトしてから、ログイン画面の左下で Plasma (Wayland) を選択してからログインします。Wayland で自動ログインするには設定が必要のようです。
Plasma 6 の場合は、/etc/sddm.conf.d/kde_settings.conf を編集して、[Autologin] の Session=plasma を Session=plasmawayland に書き換えてください。Plasma 6.5 以降では Wayland の場合は Session=plasma にして X11 の場合は Session=plasmax11 にします。
X11 か Wayland かどちらを使っているか確認するには次のコマンドがあります。
$ echo $XDG_SESSION_TYPE
Wayland セッションで日本語入力する設定です。
KDEシステム設定で、ハードウェア 入力デバイス → 仮想キーボード → Fcitx 5 を選択 → 適用をクリック
- Do not set GTK_IM_MODULE & QT_IM_MODULE & SDL_IM_MODULE . You could unset GTK_IM_MODULE & QT_IM_MODULE by runing im-config and then selecting do not set any IM from im-config and use desktop default"
- Run chromium/electron application with --enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime
環境変数の GTK_IM_MODULE と QT_IM_MODULE は設定してあるとログインしたときにメッセージが出ます。im-config を使って unset しろと書いてますが、Arch Linux にもそんなツールはないようです。さがしてみると /etc/profile.d/input-support.sh が見つかりました。次のように書き換えます。
/etc/profile.d/input-support.sh
# https://wiki.archlinux.org/index.php/Fcitx
# https://wiki.archlinux.org/index.php/Fcitx5
im=fcitx
#export GTK_IM_MODULE=$im
#export QT_IM_MODULE=$im
export XMODIFIERS=@im=$im
export INPUT_METHOD=$im
#export SDL_IM_MODULE=$im
if [ $DESKTOP_SESSION == "plasma" ]; then
export GTK_IM_MODULE=$im
export QT_IM_MODULE=$im
export SDL_IM_MODULE=$im
fi
行が # で始まるのはコメント行なのでなくてもいいです。if文は X11 でログインする場合に日本語入力できるようにするためのです。保存して(管理者パスワードが必要です)ログアウト、再ログインします。この /etc/profile.d/input-support.sh の書き換えは必要なくなったようです。extra/manjaro-asian-input-support-fcitx5 が設定するままで、X11 でも Wayland でも使えます。(XWayland で動くアプリのための export XMODIFIERS=@im=fcitx が AppImage版GVim などの日本語入力のために必要です。~/.bash_profile に書いておいたほうがいいでしょう。ついでに export INPUT_METHOD=fcitx も書いておくべきかもしれません)
2025-12-08 の Stable Update で Plasma 6.5.3 になりました。それで $DESKTOP_SESSION の値がかわりました。
/etc/profile.d/input-support.sh
# https://wiki.archlinux.org/index.php/Fcitx
# https://wiki.archlinux.org/index.php/Fcitx5
im=fcitx
#export GTK_IM_MODULE=$im
#export QT_IM_MODULE=$im
export XMODIFIERS=@im=$im
export INPUT_METHOD=$im
#export SDL_IM_MODULE=$im
if [ $DESKTOP_SESSION == "plasmax11" ]; then
export GTK_IM_MODULE=$im
export QT_IM_MODULE=$im
export SDL_IM_MODULE=$im
fi
~/.gtkrc-2.0 に次の行を付け加えます。
gtk-im-module="fcitx"
~/.config/gtk-3.0/settings.ini と ~/.config/gtk-4.0/settings.ini の [Settings] に次の行を付け加えます。
[Settings]
gtk-im-module=fcitx
これで gtk についてはいいらしいです。qt に関しては KDE の場合はなにもしなくてもいいようです。
Electron に関しては次のオプションをつけての起動が必要な場合があるそうです。
--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime
アプリケーションメニューから右クリックで「アプリケーションを編集…」を選択します。「アプリケーション(A) 」のタブを選択して、「引数(A)」に上記オプションを書き込んで、OKボタンを押して閉じます。Snap版vscode もこれで日本語入力できるようになりました。
fcitx5 の設定を変更することにしました。
KDEシステム設定 → 地域の設定 → 入力メソッド → Mozc を選択して設定ボタンをクリック → プリエディットカーソルをプリエディットの先頭に固定する:のチェックをはずす → 適用ボタンをクリック → 1つ戻ってグローバルオプションの設定をクリック → 入力メソッドを有効にする:に変換キーを加える → 適用ボタンをクリック
fcitx5 の設定は fcitx5-config-qt を起動しても GUI でできます。
Wayland にすると GUI 関係の動作が軽くなります。マウスカーソルの速度を少し遅く設定し直しました。IME も速くなった気がします。日本語入力が改善はされると思いますが、まだ文節の区切りがどこかわからなかったりします。それに、たまに画面が数秒間固まってしまうことがあります。マウスカーソルも動きません。どうやら画像や動画のプレビューを作っているのではないかと疑っています。はっきりしませんが。
X11 を使いたいときは、ログアウトしてから、ログイン画面の左下すみで X11 を選択してからログインしてください。
Plasma freezes often によると Baloo(ArchWiki) を止めるとよくなるようです。Baloo は検索用のインデックスをつくっているのですが ~/.local/share/baloo/index が 919.5MB にもなっていました。KDE システム設定 の 検索 → ファイルの検索 で ファイルのインデックスを作成: 有効 のチェックをはずします。Baloo は使わないことにしました。
Xwayland アプリケーションであることを視認する
sudo pacman -S xorg-xeyes xorg-xwininfo xorg-xlsclients
- ターミナルで
xeyesで起動します。Xwayland で動いてるアプリのウインドウでマウスを動かすと、目玉が動きます。終了は Ctrl+c で。 - ターミナルで
xwininfoで起動します。Xwayland で動いてるアプリのウインドウでマウスを動かすと、マウスポインタが + に変わります。そのままクリックするとターミナルに情報を出力します。終了は Ctrl+c で。 - ターミナルで
xlsclients -lで Xwayland で動いてるアプリをすべてリストアップします。
kwin の Wayland デバッグコンソールを使ったほうが便利なようです。デスクトップファイルをつくればメニューから起動できてさらに便利です。
qdbus6 org.kde.KWin /KWin org.kde.KWin.showDebugConsole
~/.local/share/applications/kwinDebugConsole.desktop
[Desktop Entry]
Type=Application
Name=Kwin Debug Console
Comment=Kwin Debug Console
Exec=qdbus6 org.kde.KWin /KWin org.kde.KWin.showDebugConsole
Categories= System;
KDE Wallet
KDE Wallet(ArchWiki) は Plasma でパスワードを管理するためのツールです。ネットワーク接続のパスワード、ウエブブラウザーでサイトのパスワードなどです。
デフォルトのウォレット名 kdewallet を使い、ウォレットのパスワードはユーザーがログインに使うパスワードと同じにする、のが標準的な使い方らしいです。
DBus(プロセス間通信)API の org.freedesktop.secrets を使ってるそうなので、flatpak や sandbox を使っている場合はこれを通す設定にしなければなりません。
D-Bus の自動アクティベーションするには ~/.local/share/dbus-1/services/org.freedesktop.secrets.service をつくって次のように書いておくそうです。
[D-BUS Service]
Name=org.freedesktop.secrets
Exec=/usr/bin/kwalletd6
ですがウエブブラウザーのFLATPAK版Falkon で試したところ、org.freedesktop.secrets と org.freedesktop.secrets.service の設定は必要ないです。Flatseal で Falkon を選択して Socket の D-Bus session bus をオンにするだけで、org.kde.kwalletd5 が有効となり Falkon でパスワードを保存できるようになりました。org.freedesktop.secrets は使ってないようです。
systemd/ジャーナル
systemd は通常 /var/log/journal にログを残します。ファイルシステムの容量の10%(ただし最大 4GiB)まで書き込むそうです。個々のファイルサイズは 4MiB から 128MiB までになるようです。重大なエラーが発生したなども書き込まれるようですが、必要ないのではないかと思います。問題が起きたとしても、ログを調べるには知識も時間も必要ですから。
/etc/systemd/journald.conf に次の行を書きます。通常は auto にしておくようです。他には、メモリーに書く volatile それに persistent があります。
Storage=none
システムメンテナンス(ArchWiki) によると、本当はログをとって暇なときにエラーが出てないか確認したほうがいいそうです。
journalctl -p 3 -xb
Fonts
フォント(ArchWiki) を手動でインストールする場合は、~/.local/share/fonts/ (自分用)または /usr/local/share/fonts/(全ユザー用)にインストールします。適当にサブフォルダをつくって構いません。ただし、全ユザー用のパーミッションは、ファイルの場合は 444 、ディレクトリの場合は 555 が必要です。 pacman などでインストールしたフォントは /usr/share/fonts/ にあります。
#fontconfig フォントキャッシュをアップデート(自動でおこなわれるため実行の必要なし)
sudo fc-cache -vf
【 fc-cache 】コマンド――フォントキャッシュを更新する によるとフォントキャッシュは /var/cache/fontconfig/ にあり、これは /etc/fonts/fonts.conf で設定されています。フォントキャッシュが壊れた場合は次のコマンドで削除、更新されるようです。
fc-cache -r
IPAフォント
詳しくは IPAexフォントおよびIPAフォントについて と IPAフォント(wikipedia) などで。
- IPAフォント:IPA明朝 (IPAMincho) 固定幅フォント。IPA P明朝 (IPAPMincho) 可変幅フォント。
IPAゴシック(IPAGothic) 固定幅フォント。IPA Pゴシック(IPAPGothic) 可変幅フォント。 - IPAexフォント:IPAex明朝(IPAexMincho)、IPAexゴシック(IPAexGothic)。基本は和文文字は固定幅、欧文文字は変動幅。
- IPAmj明朝フォント:(IPAmjMincho) 異体字セレクタのIVSを利用することで、Moji_Johoコレクションにある異体字約1万通りが利用できる。一般的な用途には推奨されない。
sudo pacman -S otf-ipafont otf-ipaexfont
sudo pacman -S otf-ipamjfont
源ノ角ゴシック
- 源ノ角ゴシック:英語では Source Han Sans、Google では Noto Sans CJK。
- 源ノ明朝:英語では Source Han Serif、Google では Noto Serif CJK。
ややこしい「源ノ角ゴシック」と「Noto Sans」のまとめ も参考に。
等幅について。Source Han Mono(源ノ等幅)は日本・中国・台湾・香港・韓国を含む大きなもので、Source Han Code JP (源ノ角ゴシック Code JP)は日本語用。これらの半角は全角の3分の2の幅。なので横に伸びた感じがして、慣れるのは難しそう。
sudo pacman -S adobe-source-han-sans-jp-fonts
sudo pacman -S adobe-source-han-serif-jp-fonts
yay -S otf-source-han-code-jp
IBM Plex
IBM Plex もインストールすることにしました。pacman では hinted がインストールされるようです。AUR にはotf版もあります。IBM-Plex-Sans-JP をシステムフォントとして使うと行間が広くなりすぎます。原因不明です。フォントの種類が多すぎでアプリのフォントメニューが使い難くなります。アンインストールしました。
sudo pacman -S ttf-ibm-plex
M+ FONTS
M+ FONTS というのがあるのですが漢字が少ないので派生フォントとして MigMix(M+フォントに手を加えずIPAゴシックと合成)、Migu(M+の字形に改変を加えてIPAゴシックと合成)、Ricty(Inconsolata と Migu 1M の合成とチューニング、作者自身が他のフォントの使用を推奨)などがあります。(M+とIPAの合成フォント プログラミング用フォント Ricty)次のコマンドですが ttf-migmix は OSDN からダウンロードしようとして失敗することがあります。github からダウンロードするように書き換えればいいと思うのですが。ttf-ricty もうまくいかないようです。
yay -S ttf-migu ttf-migmix ttf-ricty
yuru7(tawara)
yuru7(tawara) udev-gothic をターミナルで使っており感謝です。plemoljp は インストール容量約443MiBと大きいです。
yay -S ttf-hackgen ttf-udev-gothic ttf-plemoljp-bin ttf-firge ttf-juisee ttf-bizin-gothic
その他
Morisawa BIZ UDフォント の無償版があるそうです。老眼対策の決定打となるかもしれません。英字で下にはみ出すのを控えめにしてるようです。小文字の p は違和感がります。英字の多い文書には向かないフォントかもしれません。
yay -S morisawa-biz-ud-gothic-fonts morisawa-biz-ud-mincho-fonts
近ごろのフォントに飽きた人は、さざなみフォントがいいのかも(ノスタルジーです)。東風(こち)フォントもありました。フリーソフト・フォント
sudo pacman -S ttf-sazanami
yay -S ttf-kochi-substitute
ttf-migu と ttf-kochi-substitute は AUR から削除されたようです。
emoji
絵文字と記号(ArchWiki)。もし絵文字フォントがなければインストールします。
sudo pacman -S noto-fonts-emoji
Full Emoji List, v15.1 の Unicode Emoji data files にあるテキストファイルを表示させてみると、v15.1 のほぼすべてのカラー絵文字を表示できます。ただ、絵文字は普通の文字より大きく表示しないとなんだか分からないものが多いし、ハートが多く、驚いた顔が少ないです。
Windows10 の LibreOffice Calc で "源ノ角ゴシック JP Regular" にしたところが Manjaro Linux で開くと代替フォントが使用されます。Windows では "源ノ角ゴシック JP" と "源ノ角ゴシック JP Regular" のどちらでも選択(同じフォントのようです)できるのですが、Linux では "源ノ角ゴシック JP Regular" がありません。/etc/fonts/local.conf に次の設定を書き加えることで、 "源ノ角ゴシック JP" にフォールバックさせることができます(このやり方でいいのか、自信はありません)。Windows で "源ノ角ゴシック JP Regular" は指定しないことにして、 "源ノ角ゴシック JP" を指定した方が無難なようです。
/etc/fonts/local.conf(カラー絵文字の設定は、昔 ArchWiki にあったものです。この設定があったほうがより確実にカラーで絵文字を表示してくれるようです。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="weak">
<string>Emoji</string>
</edit>
</match>
<match>
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend" binding="weak">
<string>Emoji</string>
</edit>
</match>
<match>
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend" binding="weak">
<string>Emoji</string>
</edit>
</match>
<match target="pattern">
<test name="family">
<string>源ノ角ゴシック JP Regular</string>
</test>
<edit name="family" mode="assign">
<string>源ノ角ゴシック JP</string>
</edit>
</match>
</fontconfig>
NumLock
Plasma の起動時に NumLock をオンにすることができます。
KDEシステム設定で、入力/出力デバイス キーボード → キーボード → ハードウエア タブ 「Plasma 起動時の NumLock」でオンに。
Konsole
曖昧文字幅(East Asian Ambiguous Width)を全角で表示するオプションがないようです。曖昧文字幅文字が半角の多いフォントを使ったほうがよさそうです。フォントの設定で "Show all fonts" をチェックしてから UDEV Gothic または PlemolJP Console あるいは HackGen Console(音引きの曲がりに慣れることができないのですが)などを選択。
Dolphin
Dolphin(ArchWiki) は KDE のファイルマネージャです。右クリック → 新規作成 > のコンテキストメニューにテンプレートフォルダ内のテンプレートが表示されないので調べてみました。 Template directory problem - no templates in context menu と Add your own “Create New” options in KDE Dolphin によると、~/.local/share/templates/ に .desktop ファイルを作って入れておかなければならないそうです。ファイル名は .desktop で終わればなんでもいいようです。URL はそのテンプレートファイルへの絶対パスか ~/.local/share/templates/ からの相対パスを書きます。Icon は /usr/share/icons/ 内の特に hicolor を探してみてください。
[Desktop Entry]
Name=Perl
Comment=Perl
Type=Link
URL=$HOME/テンプレート/perl.pl
Icon=application-x-perl
HelloFX.java のような java のソースファイルのアイコンを変えたいと思い方法を調べてみました。 アイコン(ArchWiki) xdg-utils(ArchWiki) XDG MIME Applications(ArchWiki) ファイルのアイコンを変更する道のり などによるとファイル名の拡張子から mime(Multipurpose Internet Mail Extensions, マイム)タイプを判断してアイコンを表示してるようです。
mimeタイプは file --mime ではなく /usr/share/mime/ などにある xml ファイルで定義されており xdg-mime コマンドで確認できます。 ~/.local/share/icons にファイル名を変えてコピーする。
file --mime HelloFX.java
HelloFX.java: text/plain; charset=utf-8
xdg-mime query filetype HelloFX.java
text/x-java
/usr/share/icons/hicolor/48x48/apps/ にある java-openjdk.png をコピーして ~/.local/share/icons/text-x-java.png にしてみましたが、無視され失敗でした。GUI による設定を信じるべきでした。KDEシステム設定 → アプリケーション → ファイルの関連付け から text/x-java を探してクリック、出てきたアイコンをクリックしてから選択してアイコンを変更できます。
アプリを起動したとき、フリーズすることがあるので調べていたのですが、「最近使用したファイル」「最近使用した場所」が怪しいとわかりました。「最近使用したファイル」を Dolphin で開いて、Ctrl+A で全選択、右クリックで Forget Files を選択してすべて消します。「最近使用した場所」も同様に、Dolphin で開いて、Ctrl+A で全選択、右クリックで Forget Locations を選択してすべて消します。とやってみたのですが、Dolphin を開き直すと「最近使用したファイル」と「最近使用した場所」にリストが現れます。何度やっても現れます。
recent-files-and-locations-listed-in-dolphin-and-other-applications-are-very-old を読んでみると、KDEシステム設定で設定できるようなのです。それと ~/local/share/RecentDocuments の中身も消去しておいた方が良さそうです。
KDEシステム設定 の セキュリティーとプライバシー の 最近のファイル で設定できます。 「履歴を残す: 永遠に」になってましたがこれはこのままでいいようです。履歴を消去して、開かれた文書を記憶する: で「記憶しない」をチェックします。「最近使用したファイル」「最近使用した場所」の両方とも記憶しなくなります。
プレビューアイコンを表示させるとフリーズが多くなる(この問題は解消されました)のですが、F12 でオン・オフが簡単にできます。
Dolphin でファイル名に /(スラッシュ)を使うと自動的に ⁄ (U+2044 Fraction Slash)に置き換わります。
Dolphin の動画のプレビューアイコンに問題があります。動画サムネイルのデータは ~/.cache/thumbnails の中に保存されますが、このフォルダは自動では作られないようです(2025年2月上旬の状態では)。なければ次のコマンドで作ってください。-p オプションでフォルダがすでにある場合はなにもしないようです(mkdirでディレクトリが存在しない時だけディレクトリを作成する。)。~/.bash_profile に書き込んでおきました。
mkdir -p ~/.cache/thumbnails
さらにターミナルから dolphin を起動して、動画ファイルのあるフォルダを開くと大量のエラーメッセージが表示されることがあります。これがシステムを不安定にしいているのではないか? 標準エラー出力のめづまり問題です。 /usr/share/applications/org.kde.dolphin.desktop をコピーして ~/.local/share/applications/org.kde.dolphin.desktop とし、Exec行を次のように書き換えます。不都合なメッセージは闇から闇へ。
Exec=dolphin 2>/dev/null %u
Kate
Kate でHTMLを編集すると、LSP がどうのと言ってくるのでインストールしたけど使い方がよくわからない。(langserver.org)
sudo pacman -S vscode-html-languageserver
選択した範囲をまとめてインデントするには Tab、 減らすには Shift Tab が標準のよう。
リムーバブルデバイスにあるファイルの場合、メニューの "最近のファイルを開く" から開くと白紙になってることがある。ログインする前からつなげていても、ログインしたときに /run/media/USER_NAME/MEDIA_NAME に自動ではマウントしてくれないことが原因らしい。Dolphin でそのリムーバブルデバイスを開けばマウントしてくれる。(KDEシステム設定 → 接続されたデバイス → ディスクとカメラ → デバイスの自動マウント でログイン時の自動マウントの設定ができます。)
pacman
pacman(ArchWiki) はパッケージマネージャです。「部分的なアップグレードはサポートされていません。どんなときでも、パッケージをインストールする前に (pacman -Syu で) アップグレードしてください。」インストールされているパッケージのアップグレードを確認したいときは pacman-contrib パッケージに含まれている bash スクリプト checkupdates を使うことで、システムアップデートを行わずに安全に確認が行えます。
# 全てのパッケージのアップグレード
#「システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です。」
sudo pacman -Syu
# パッケージデータベースに問い合わせ
pacman -Ss 検索ワード
# パッケージの詳細な情報
pacman -Si パッケージ名
# パッケージのさらなる情報
pacman -Sii パッケージ名
# パッケージのインストール(依存パッケージもインストール)
sudo pacman -S パッケージ名
# 提案パッケージを依存パッケージとしてインストール
sudo pacman -S --asdeps パッケージ名
# パッケージの削除(依存パッケージは残す)
sudo pacman -R パッケージ名
# パッケージの削除(そのパッケージのみが依存しているパッケージも削除)
sudo pacman -Rs パッケージ名
# インストール済みパッケージから検索
pacman -Qs 検索ワード1 検索ワード2 ...
# インストール理由を「依存パッケージ」に
sudo pacman -D --asdeps パッケージ名
# インストール理由を「明示的にインストール」に
sudo pacman -D --asexplicit パッケージ名
- pacman からの出力は /var/log/pacman.log に記録されています。
- pacman はダウンロードしたパッケージを /var/cache/pacman/pkg/ に保存します。
- pacman の設定は /etc/pacman.conf に記述されています。
トラブル
pacman -Syu が途中で止まったとき。パッケージデータベースの同期の途中で(回線の不調などで)止まったときは、もう一度 sudo pacman -Syu を実行する。パッケージのダウンロードの途中で止まったときは、sudo pacman -Su を実行する(ファイルの途中からでもレジュームでダウンロードしてくれる)。ただし、サーバーからパッケージが(最新版に更新されるなどして)削除された場合もあるので、その場合は pacman -Syu を実行する。
sudo pacman -Syu で次のメッセージが出た場合。
:: パッケージデータベースの同期中...
エラー: 全てのデータベースの同期に失敗しました (データベースをロックできません)
次のコマンドで db.lck を削除した後、pacman -Syu を実行する。
sudo rm /var/lib/pacman/db.lck
:: パッケージデータベースの同期中...
エラー: 全てのデータベースの同期に失敗しました (リポジトリに設定されたサーバーがありません)
次のコマンドでサーバーの設定をした後、pacman -Syu を実行する。(使用するミラーは /etc/pacman.d/mirrorlist に設定されています。このファイルは自動で書き換えられるようです。)
sudo pacman-mirrors -c Japan
次のようなメッセージが出た場合。-Suu でダウングレードも許可する。
警告: plymouth: ローカル (24.004.60-6) の方が extra よりも最新です (22.02.122-17)
sudo pacman -Suu
community レポジトリの消滅 Community Repo Error によると、community の中身はすでに extra に移されているそうです。sudo pacman -Syu でエラーが出でる場合は /etc/pacman.conf の [community] の部分を削除してください。
[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
Switching Branches
Switching Branches Manjaroのリポジトリは unstable、testing、stable の3つがあります(一番安全なのが stable です)。これを切り替えるには次のコマンドです。
sudo pacman-mirrors --api --set-branch {branch}
データベースを更新するには次のコマンドです。
sudo pacman-mirrors --fasttrack 5 && sudo pacman -Sy
現在参照しているブランチを表示させるコマンドです。
pacman-mirrors -G
パッケージキャッシュの掃除
pacman-contrib をインストールします。pacman がダウンロードしたパッケージは通常 /var/cache/pacman/pkg/ にあります。いくらでもため込むので、たまに掃除が必要になります。Manjaro の場合すべて削除してもよさそうですが、せっかくダウンロードしたファイルなので最新と1つ前のバージョンを残しておくことにしました。
# 最も新しい3つを残して全て削除
paccache -r
# すべて削除
paccache -rk0
# 最も新しいバージョン1つだけを保持
paccache -rk1
# 最も新しいバージョン2つだけを保持
paccache -rk2
yay
Arch: Manjaro で「pacman」と「yay」のコマンド操作〈H53〉
yay の設定は ~/.config/yay/config.json
yay は必要なファイルをダウンロードしてパッケージを ~/.cache/yay/ に作ります。package_name-version.pkg.tar.zst をどこかにバックアップしてけば再インストールできます。
パッケージをダウンロードするが、インストールはしない
sudo pacman -Sw パッケージ名
リモートリポジトリ以外の'ローカル'のパッケージをインストールする
sudo pacman -U /path/to/package/package_name-version.pkg.tar.zst
ローカルパッケージのコピーを pacman のキャッシュに保持するには
sudo pacman -U file:///path/to/package/package_name-version.pkg.tar.zst
(pacman の設定ファイルに記述されているリポジトリ以外の) 'リモート'パッケージをインストールする
sudo pacman -U http://www.example.com/repo/example.pkg.tar.zst
pamac
GUI でパッケージの管理ができるツール。端末からも使える。設定から「アップデートがあるか確認する」をオフにすることで自動でアプデートの確認をしなくなります。使ってないのでアンインストールすることにしました(2025年12月)。
sudo pacman -Rsn manjaro-application-utility
sudo pacman -Rsn pamac-gtk pamac-cli libpamac pamac-tray-icon-plasma
ファイル検索
Linuxでファイルを検索する:findとlocateの使い方 find コマンドは高機能ですが、単純にファイル名から検索するのには遅すぎます。そこで locate(ArchWiki) を使うわけですが、mlocate と高速な plocate があります。plocate をインストールしてみました。
sudo pacman -S plocate
まずデータベースをつくる必要があります。デフォルトでは /var/lib/plocate/plocate.db につくられます。デフォルト設定ファイル(/etc/updatedb.conf)の除外パス(PRUNEPATHS)には /media と /mnt が含まれているので、デフォルトでは外部デバイスのファイルは検索できません。
#データベースの作成
sudo updatedb
# filename を検索
locate filename
# -b, --basename を指定するとパスの最後の部分(ベースネーム)に一致しなくてはなりません。
locate -b filename
# -i, --ignore-case を指定すると大文字小文字が無視されます。
locate -i filename
外部デバイスで検索するにはそのデバイスのデータベースをつくるのがいいかもしれません。(USER_NAME と DEVICE_NAME は置き換えて下さい。df コマンドで確かめることもできます。)
sudo updatedb -U /run/media/USER_NAME/DEVICE_NAME -o DEVICE_NAMEdb
locate -d DEVICE_NAMEdb filename
# あるいは
sudo updatedb -U /run/media/ -o mediadb
locate -d mediadb filename
zip
Windowsで作ったzipファイルは、unar で解凍すればファイル名が文字化けしないそうです(文字コードが自動認識される)。(アーカイブと圧縮(ArchWiki) も参照)
unar xxx.zip
unar -e help でサポートされてる文字コードがリストされます。
* Shift_JIS (MS_Kanji, csShiftJIS, windows-31j, csWindows31J)
となっているので、Shift_JIS と windows-31j (cp932) は同じ扱いのようです。文字コード指定する場合はつぎのように。
unar -e Shift_JIS xxx.zip
# unzip がインストールされてる場合
unzip -O cp932 xxx.zip
unzip -O shift-jis xxx.zip
7z
7-Zip, 7-Zip(ArchWiki) は高速で圧縮率も高く UTF-8 を使う仕様なので文字化けしにくいそうです。Windows11 でも標準で対応してるそうなので、7z を使う方針にしました。ただし「7z 形式はファイルの 所有者/グループ を保存しない」そうです。
sudo pacman -S 7zip
# ファイル/ディレクトリをアーカイブに追加 (または新規作成)
# アーカイブに入れるファイル/ディレクトリをすべて含むディレクトリに移動してから
7z a archive.7z ファイルまたはディレクトリ名
# アーカイブ内の既存のファイルを更新するか、新しいファイルを追加
7z u archive.7z ファイル名またはディレクトリ名
# アーカイブの内容を一覧表示
7z l archive.7z
# アーカイブの展開(パスを含み、ディレクトリ構造を保って展開)
7z x archive.7z
# アーカイブの展開(パスを含まず、ディレクトリ構造を無視して展開)
7z e archive.7z
# アーカイブの整合性を確認
7z t archive.7z
# アーカイブ内の特定のファイル/フォルダを解凍する。
# ファイル/フォルダ名は複数指定できます。ワイルドカード * 任意の文字列、? 任意の1文字が
# 使えますがシェルに解釈されないようにエスケープするか " " か ' ' で囲む必要があります
7z x archive.7z "path/*.html"
# サブフォルダからも探すには -r 、出力するディレクトリを指定するには -o に続けて、
# 重複するものは上書きするかたずねてくるので -y ですべてにyesとします
Ark を使えばGUIで操作できます。Gwenview は7zで圧縮された画像を解凍しないで見ることができます。
bsdtar
パッケージ libarchive に含まれています。パスに続いたファイル名を単純にリストできます。
# 内容をリスト表示
bsdtar -t -f archive.7z
スリープ
Windows ではスリープしてもダウンロードは止まらず、便利だったけど Linux のスリープでは難しいらしい。電源管理/サスペンドとハイバネート(ArchWiki)
壁紙
- Manjaro Plasma では /usr/share/wallpapers にあります。
- Manjaro GNOME では /usr/share/backgrounds にあります。
pkgfile
pkgfile(ArchWiki) は特定のファイルを所有しているパッケージはどれか、または特定のパッケージに入っているファイルはどれかを表示するツールです。 デフォルトでは、毎日パッケージデータベースがアップデートされる設定になっています。自動アップデートを無効にすることができます。(systemd(ArchWiki))
#パッケージデータベースの自動更新を無効にする
systemctl disable pkgfile-update.timer
#パッケージデータベースの自動更新を有効にする
systemctl enable pkgfile-update.timer
#手動でパッケージデータベースの更新
sudo pkgfile -u
#参考
systemctl list-unit-files | grep pkg
systemctl status pkgfile-update
systemctl start pkgfile-update.servic
systemctl stop pkgfile-update.servic
systemctl enable pkgfile-update.service
systemctl disable pkgfile-update.service
pkgfile は使わないのでアンインストールしました。 pacman -F ファイル名 で検索できます。
pacman -F pkgfile
extra/pkgfile 21-2
usr/bin/pkgfile
usr/share/bash-completion/completions/pkgfile
NTFS
Windows の NTFS(ArchWiki) でフォーマットされたUSB接続のハードディスクを使っていると
“wrong fs type, bad option, bad superblock on /dev/sdc2” error mounting HDD
というようなメッセージが出てマウントできませんでした。Windows で CHKDSK 読み取り専用でチェックしても問題なしといわれます。ArchWiki のとおりやってみると、マウントできました。
$ sudo dmesg
ntfs3: sdc2: It is recommened to use chkdsk.
ntfs3: sdc2: volume is dirty and "force" flag is not set!
$ sudo ntfsfix --clear-dirty /dev/sdc2
Mounting volume... OK
Processing of $MFT and $MFTMirr completed successfully.
Checking the alternate boot sector... OK
NTFS volume version is 3.1.
NTFS partition /dev/sdc2 was processed successfully.
UEFI Boot Order
外付けSSDに Manjaro をインストールして使っていますが、このSSDを外した状態で Windows を起動すると Boot の優先順序の設定が変わってしまいます。これはバグではなくて仕様のようです(ブートドライブを UEFI ブートモードでスワップすると起動順序が変更される理由)。ブートドライブはなるべく外さないで使った方が良さそうです。ブートの順序は次のコマンドで確認、変更できます。Unified Extensible Firmware Interface(ArchWiki)
$ efibootmgr
BootCurrent: 0000
Timeout: 6 seconds
BootOrder: 0002,0000,0001
Boot0000* Manjaro
Boot0001* ubuntu
Boot0002* Windows Boot Manager
# ブートオーダーの変更
$ sudo efibootmgr -o 0000,0002,0001
# エントリー(XXXX)の削除
$ sudo efibootmgr --delete-bootnum --bootnum XXXX --unicode
# エントリーの作成
$ sudo efibootmgr --create --disk /dev/sdx --part 1 --loader '\EFI\BOOT\BOOTX64.EFI' \
--label 'Manjaro Boot Manager' --unicode
Shell
シェルについてまとめる bashの.profileや.bashrc等を実行する動作仕様 fish shellが結構良かった話
sudo pacman -S fish
chroot
別のディレクトリをルートに見せかけるコマンドです。システムが起動しなくなったとき Manjaro のインストール用LiveUSBから起動して chroot でルートを変更して修正を試すことができます。chroot(ArchWiki) から自分の場合の方法を整理しておきます。
pacman が途中で止まってしまい、pacman を再実行してみたら正常に終わったので再起動してみたら、できずに /boot/vmlinuz がないとかいってきます。LiveUSB で起動してみると /boot/vmlinuz はありませんでした。このファイルは圧縮されたカーネルそのものらしいのです。pacman はカーネルを消去してから止まったようです。カーネルを再インストールすれば回復すると思われます。
まず、Manjaro-kde のインストール用LiveUSBで起動します。コンソールを起動して、コマンド lsblk で修復するデバイスのマウントポイントを確認します。/run/media/manjaro/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx という感じでかなり長かったので変数newに入れておきました。root のパスワードはなにも設定されてないので、要求されたらただ Enterキー をたたいてください。
lsblk
new=/run/media/manjaro/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
cd $new
sudo mount -t proc /proc proc/;
sudo mount -t sysfs /sys sys/;
sudo mount --rbind /dev dev/;
sudo mount --rbind /run run/;
sudo chroot $new
sudo pacman -U /var/cache/pacman/pkg/linux613-6.13.8-2-x86_64.pkg.tar.zst
exit
Firewall
パッケージ ufw または firewalld をインストールします。ufw のほうが設定が簡単です。Uncomplicated Firewall(ArchWiki), Firewalld(ArchWiki) KDEシステム設定→ネットワーク の Wi-Fi と インターネット→ファイアウォール で設定できます。GUIで設定できる パッケージ guwf(ファイアウォール設定ツール)をインストールしたほうがわかりやすいのですが、KDEシステム設定と共存できるのかわかりません。
Clam AntiVirus
オープンソースで無料のアンチウイルスソフトウェアです。公式サイトは ClamAVNet です。ClamAV(ArchWiki) によるとClamAV は主として Windows デスクトップのためのファイル・メールサーバーで使われることを想定しているので、基本的には Windows のウイルスやマルウェアを検知します。
GUIツールの ClamTk をインストールしました。ウイルスのデータベースの置き場所は、clamav は /var/lib/clamav をつかって、clamtk は ~/.config/clamtk/db をつかっています。
sudo pacman -S clamtk
ウイルスコードは含まれていない無害な署名が Anti Malware Testfile にあります。ArchWiki に書いてあるのは古いURLです。
$ sudo freshclam # 60MiB + 162MiB + 277KiB以上ありました
WARNING: Clamd was NOT notified: Can't connect to clamd through /run/clamav/clamd.ctl: No such file or directory
curl https://secure.eicar.org/eicar.com.txt | clamscan -
$ curl -O https://secure.eicar.org/eicar.com.txt
$ clamscan --recursive --infected /home # or -r -i
使わないのでアンインストールしました。
curl
#基本的な使い方 カレントディレクトリにURLに含まれるファイル名で保存
curl -O https://hadwiger.static.jp/index.html
#レジュームしたい場合は -C - をつける
curl -C - -O https://hadwiger.static.jp/index.html
#保存するファイル名(パスも指定可)を指定するには小文字の o で
curl -o ~/index.html https://hadwiger.static.jp
# -L はリダイレクトを許し -I でヘッダーのみを表示します
# content-length: で長さ accept-ranges: にその単位が表示されてます
curl -LI http://hadwiger.html.xdomain.jp/index.html
HTTP/1.1 301 Moved Permanently
Date: Sun, 22 Jun 2025 13:28:50 GMT
Server: Apache
Location: https://hadwiger.static.jp/index.html
Content-Type: text/html; charset=iso-8859-1
HTTP/2 200
server: nginx
date: Sun, 22 Jun 2025 13:28:51 GMT
content-type: text/html
content-length: 6559
vary: Accept-Encoding
last-modified: Sat, 31 May 2025 15:00:00 GMT
etag: "199f-6366fc8e53c00"
accept-ranges: bytes
#最初の 1KiB(1024B)のみをダウンロードする
curl -L -r 0-1023 -o part1 http://hadwiger.html.xdomain.jp/index.html
#次の 1KiB(1024B)をダウンロードする
curl -L -r 1024-2047 -o part2 http://hadwiger.html.xdomain.jp/index.html
Clonezilla
障害復旧、ディスククローン、ディスクイメージング、デプロイメントソリューション。Clonezilla は Manjaro のLive USB にも含まれています。ターミナルから sudo clonezilla で起動できます。(ただし、使いにくいです。USB が接続されたという通知が突然出現して誤操作になりやすいです)ディスクのクローン(ArchWiki)、 同期およびバックアッププログラム(ArchWiki)
tar
Tar によるフルシステムバックアップ(ArchWiki) を参考にシステムバックアップをしようと思いましたが面倒なのでとりあえず /home のみをバックアップすることにしました。tar を使えば Wimdows の NTFSフオーマットのHDDにも安全にバックアップできます。時間がかかるので圧縮しないことにしました。tar コマンド も参考になります。--exclude で除外するフォルダは、ワイルドカードを使って .cache/?* のように書いておけば中身を捨てた空のフォルダだけがアーカイブされます。(ワイルドカードについては tarコマンド に説明がありました。)
home バックアップ
~/bin/backhome.sh
#!/usr/bin/zsh
# /home をバックアップします。
# -c, --create 新しいアーカイブを作成します。
# -p, --preserve-permissions, --same-permissions ファイル属性についての情報を抽出
# -v は対象ファイルを表示、-f はアーカイブファイル名を指定するオプションです。
#
# --acls --no-acls POSIX ACLs のサポートを有効・無効にします。
# --xattrs --no-xattrs 拡張属性のサポートを有効・無効にします。
#
date=$(date "+%F")
bsdtar --exclude-from=$HOME/bin/backhome-exclude \
--acls --xattrs -cpvf /run/media/PATH/backhome-$date.tar /home
~/bin/backhome-exclude
/home/USERNAME/Ram/?*
/home/USERNAME/.cache/?*
/home/USERNAME/mediadb
フルシステムバックアップ
起動してるシステムのバックアップでもたいして問題ないようです(アプリなどなるべく終了させたほうがいいと思いますが)。sudo をつけて次のスクリプトを実行します。(2026年2月 /boot/efi/ の中身もバックアップするように変更)
~/bin/backfull.sh
#!/usr/bin/zsh
# full system backup
#
date=$(date "+%F")
bsdtar --exclude-from=/home/USERNAME/bin/backfull-exclude \
--acls --xattrs -cpvf /run/media/USERNAME/PATH/backfull-$date.tar /
~/bin/backfull-exclude
/dev/?*
/proc/?*
/sys/?*
/tmp/?*
/run/?*
/mnt/?*
/media/?*
/lost+found
/home/USERNAME/Ram/?*
リストア
- リストアされるパテーションとバックアップのあるパテーションをマウントします(Dolphin でマウントできます)。
- ターミナルを起動して
lsblk -fでリストアされるパテーションのマウントポジションを確認し、cd で移動します。 sudo bsdtar --acls --xattrs -xpzvf backupfileで展開します。- フルシステムのリストアで起動可能にする場合は、/etc/fstab のUUIDなどの修正、chroot して initramfs の作成、さらに /boot/efi をマウントしてから grub のインストール、メイン設定ファイル(/boot/grub/grub.cfg)の作成が必要のようです。
ブータブルバックアップ
- MBR (Master Boot Record) MBRは、古いパーティションスキームの一つで、BIOS(Basic Input/Output System)を通じてブートローダーを読み込むためのブートセクタを格納する特別なセクタです。
- GPT (GUID Partition Table) GPTは、新しいパーティションスキームの一つで、EFI(Extensible Firmware Interface)やUEFI(Unified Extensible Firmware Interface)ベースのシステムで使用されます。GPTは、パーティションテーブルにGUID(Globally Unique Identifier)を使用し、パーティションを一意に識別します。
GPTパーティションで64bit GRUB UEFI usb接続の外部ドライブとしましす。次の3つの領域をつくります。
- 未割り当て(core.img が埋め込まれるそうです)
- EFI System Partition (ESP とも呼ばれます)
- ルートファイルシステム
先頭に未割り当ての領域が必要です。Manjaroインストーラーは 2MiB 確保しますが、ext4 を btrfs に変換する btrfs-convert は足りないといってきます。4MiB にしました。
ESP は Manjaroインストーラーは標準で 300MiB 確保します。(マウントポイントは /boot/efi ですが、これは Arch では非推奨です。)esp フラグを立てる必要があります。fat32(vfat)でフォーマットするのが標準的です。
残り全部をルートファイルシステムにしました。Btrfs か ext4 でフォーマットするのが標準的です。
パッケージ grub, install-grub, update-grub が必要です。install-grub はなぜかインストールされてませんでした。GRUB(ArchWiki) によると GRUB のインストールは機種によって異なる場合があるそうです。GRUB/EFI サンプル(ArchWiki)
Parted(ArchWiki) でパーティションを切りました。(parted) はプロンプトです。ドライブは sdx としてますが、lsblk -f で調べて置き換えてください。フォーマットのときラベルを付けたほうがわかりやすいです。東芝のHDDなので rootSHIBA にしておきました。
sudo parted /dev/sdx
(parted) mklabel gpt
(parted) mkpart "" fat32 4MiB 304MiB
(parted) set 1 boot on
(parted) mkpart "" ext4 304MiB 100%
(parted) quit
sudo mkfs.fat -F 32 -n bootSHIBA /dev/sdx1
sudo mkfs.ext4 -L rootSHIBA /dev/sdx2
これで Dolphin でマウントできるのでマウントしてください。
cd /run/media/USERNAME/rootSHIBA
sudo mkdir -p boot/efi
sudo mount LABEL=bootSHIBA boot/efi
tar でバックアップしたシステムをリストアして、/run/media/USERNAME/rootSHIBA/etc/fstab の UUID を(lsblk -f などで確認して)修正します。もし必要なら etc/kernel/cmdline も修正してください。それから準備のあと chroot します。「mount: (注意) fstab が変更されましたが、 systemd はまだ古いバージョンを使っています。'systemctl daemon-reload' でリロードしてください。」とメッセージが出るので、chroot する前に 'systemctl daemon-reload' したほうがいいようです。
cd /run/media/USERNAME/rootSHIBA
sudo mount LABEL=bootSHIBA boot/efi/
sudo mount -t proc /proc proc/; sudo mount -t sysfs /sys sys/;
sudo mount --rbind /dev dev/; sudo mount --rbind /run run/;
sudo chroot /run/media/USERNAME/rootSHIBA
#initramfs の作成
sudo mkinitcpio -P
#grub のインストール(もし grub を使うのならば)
# --removable (esp)/efi/BOOT/bootx64.efi
# --bootloader-id=Manjaro (esp)/efi/Manjaro/
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Manjaro --removable
#メイン設定ファイル(/boot/grub/grub.cfg)の生成(もし grub を使うのならば)
grub-mkconfig -o /boot/grub/grub.cfg
#chrootから抜けます
exit
Ext4
linuxで、ext4 のジャーナルを無効にする。# ジャーナリングを無効に
sudo tune2fs -O "^has_journal" デバイス
# 確認 has_journal がなければジャーナルは作られていない事になります。
sudo debugfs -R features デバイス
Ext4(ArchWiki)
Secure Boot
Windows 11 を使わないのであれば Secure Boot にする必要はないと思ってましたが、後学のため試してみました。Unified Extensible Firmware Interface/セキュアブート(ArchWiki)
鍵の書き換えをするとマシンによっては文鎮化(起動も再設定も不可能な状態)してしまう可能性があるそうです。そこまでひどい状態にならなくても、何らかの不具合が生じる可能性もあります。ですから自己責任ということで慎重に。
- Platform Key (PK) トップレベル鍵
- Key Exchange Key (KEK) Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵
- Signature Database (db) EFI バイナリに署名するのに使われる鍵やハッシュが含まれます
- Forbidden Signatures Database (dbx) EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます
まず鍵のバックアップをします。
$ sudo pacman -S efitools
$ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done
起動時にF2で UEFI BIOS を開いて、Boot → Secure Boot でチェックを入れます(機種によって違いがあります)。
Secure Boot ✔
Install Intel Platform Key
Force Secure Boot Defaults
Clear Secure Boot Data
Install Intel Platform Key にチェックして再起動すると Intel の PK が登録されます。Force Secure Boot Defaults にチェックで PK を消してデフォルトの状態になります。Clear Secure Boot Data は試してませんが鍵をすべて消すようです。
PK が登録されていない状態だと起動すると Setupモード になって秘密鍵がなくても鍵を登録できる状態になるようです。sbctl を使うと簡単に鍵を作成登録ができます。(ただし sbctl が使えない機種もあるそうです。)
$ sudo pacman -S sbctl
# Setup mode の確認
$ sbctl status
# カスタムのセキュアブート鍵を作成
$ sudo sbctl create-keys
鍵の登録は Microsoft の鍵を一緒に登録する -m を忘れずに。-f オプションが必要な機種もあるそうです。-i は保護されているファイルに書き込むためのものです。
# UEFI に登録
$ sudo sbctl enroll-keys -m -i
署名するファイルは次の2つでいいようです。vmlinuz はファイル名にバージョンが入っているのでアップグレードのたびに必要になりそうです(pacman フックで自動で署名してくれればいいにですが)。-s オプションはデータベース(/var/lib/sbctl/files.json)にファイルを登録します。
# 署名します。
$ sudo sbctl sign -s /boot/vmlinuz-6.17-x86_64
$ sudo sbctl sign -s /boot/efi/EFI/boot/bootx64.efi
# または登録してあるファイルすべてに署名
$ sudo sbctl sign-all
バイナリが署名されたかどうか確認したり署名を一覧表示したりするには
$ sudo pacman -S sbsigntools
$ sbverify --list /path/to/binary
登録した鍵などは /var/lib/sbctl にあります。
Ventoy でUSBメモリで起動してみたら起動できました。Secure Boot になってるのに、なにもしなくても起動できました。10年前のマシンだからかもしれません。これはこれで便利ですが。。。
簡単にできると思ったのですが、どうやら GRUB のバージョンが古いせいだったようです。pacman -Syu では実際に使用してるローダーはアップグレードされないので、最初にインストールされたものをずっと使っていたことになります。アップグレードしたら起動しません。
GRUB アップグレード時の Pacman からのメッセージ
:: To use the new features provided in this GRUB update, it is recommended
to install it to the MBR or UEFI. Due to potential configuration
incompatibilities, it is advised to run both, installation and generation
of configuration:
# install-grub
# update-grub
Shim + mokutil + GRUB (insecure mode)
Secure Boot の鍵をいじりたくない場合は Shim が使えるそうです。ただし ESP を /boot/efi にマウントする Manjaro 標準ではうまくいかないです。ESP を /boot にマウントするようにブータブルバックアップドライブをつくりました。ESP を /boot/efi にマウントしてる状態でフルシステムバックアップのtarファイルがあるものとします。(パッケージ aur/shim-signed と extra/mokutil がインストールされたバックアップです)
# aur/shim-signed のインストール。
yay -S shim-signed
# extra/mokutil のインストール。
sudo pacman -S mokutil
# まずドライブの確認をします
lsblk -f
# sdx の x は置き換えてください
# ESP は 1GiB にしました
sudo parted /dev/sdx
(parted) mklabel gpt
(parted) mkpart "" fat32 4MiB 1028MiB
(parted) set 1 boot on
(parted) mkpart "" ext4 1028MiB 100%
(parted) quit
# フォーマットします
sudo mkfs.fat -F 32 -n bootSHIBA /dev/sdx1
sudo mkfs.ext4 -L rootSHIBA /dev/sdx2
# Dolphin で rootSHIBA をマウントしてください
# マウントポイントに移動します USERNAME は置き換えてください
cd /run/media/USERNAME/rootSHIBA
sudo mkdir boot
sudo chmod 755 boot
sudo mount LABEL=bootSHIBA boot/
# バックアップファイルを展開します
sudo bsdtar --acls --xattrs -xpzvf backupfile.tar
# /run/media/USERNAME/rootSHIBA/etc/fstab の UUID を(lsblk -f などで確認して)修正します。
# もし必要なら /run/media/USERNAME/rootSHIBA/etc/kernel/cmdline も修正します。
# ESP のマウントポイントを /boot/efi から /boot にします。
# /boot/ のディレクトリのパーミッションが 755 と異なると pacman に警告されることがあるので
# /boot で umask=0077 になってたら umask=0022 に変更したほうがいいようです。
systemctl daemon-reload
# chroot します
#cd /run/media/USERNAME/rootSHIBA
sudo mount -t proc /proc proc/; sudo mount -t sysfs /sys sys/;
sudo mount --rbind /dev dev/; sudo mount --rbind /run run/;
sudo chroot /run/media/USERNAME/rootSHIBA
#initramfs の作成
sudo mkinitcpio -P
#grub のインストール(もし grub を使うのならば)
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Manjaro --removable
#メイン設定ファイル(/boot/grub/grub.cfg)の生成(もし grub を使うのならば)
grub-mkconfig -o /boot/grub/grub.cfg
#chrootから抜けます
exit
システムを終了させて、rootSHIBA から Secure Boot なしで起動できることを確認したほうがいいとおもいます。起動したら次のコマンドを
#現在のブートローダーの名前を grubx64.efi に変更
sudo mv /boot/efi/BOOT/BOOTX64.EFI /boot/efi/BOOT/grubx64.efi
#shim と MokManager を ESP 上のブートローダーのディレクトリにコピー
sudo cp /usr/share/shim-signed/shimx64.efi /boot/efi/BOOT/bootx64.efi
sudo cp /usr/share/shim-signed/mmx64.efi /boot/efi/BOOT/
システムを終了させて、rootSHIBA から Secure Boot で再起動します。Booting in insecure mode のメッセージが数秒間でます。起動したら次のコマンドで確認してください。
mokutil --sb-state
SecureBoot enabled
SecureBoot validation is disabled in shim
「セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、mokutil --disable-validation で shim の認証プロセスを無効化すると良いかもしれません。」 mokutil の使い方がわかるまで認証プロセスを無効化した状態(この状態では GRUB に SBAT がなくても起動できてます)で使うことになりそうです。
Machine Owner Key(MOK)で署名して使う方法
最新の Ubuntu スクリプト より(peimage と fdt はないので取り除いてます)
GRUB_MODULES="all_video bli boot btrfs cat chain configfile echo efifwsetup efinet ext2 fat font \
gettext gfxmenu gfxterm gfxterm_background gzio halt help hfsplus iso9660 jpeg keystatus loadenv loopback \
linux ls lsefi lsefimmap lsefisystab lssal memdisk minicmd normal part_apple part_msdos part_gpt \
password_pbkdf2 png probe reboot regexp search search_fs_uuid search_fs_file search_label serial \
sleep smbios squash4 test tpm true video xfs zfs zfscrypt zfsinfo cpuid play cryptodisk gcry_arcfour \
gcry_blowfish gcry_camellia gcry_cast5 gcry_crc gcry_des gcry_dsa gcry_idea gcry_md4 gcry_md5 gcry_rfc2268 \
gcry_rijndael gcry_rmd160 gcry_rsa gcry_seed gcry_serpent gcry_sha1 gcry_sha256 gcry_sha512 gcry_tiger \
gcry_twofish gcry_whirlpool luks lvm mdraid09 mdraid1x raid5rec raid6rec http tftp"
sudo grub-install --target=x86_64-efi --efi-directory=/boot --modules="${GRUB_MODULES}" \
--sbat /usr/share/grub/sbat.csv --removable
#現在のブートローダーの名前を grubx64.efi に変更
sudo mv /boot/efi/BOOT/BOOTX64.EFI /boot/efi/BOOT/grubx64.efi
#shim と MokManager を ESP 上のブートローダーのディレクトリにコピー
sudo cp /usr/share/shim-signed/shimx64.efi /boot/efi/BOOT/bootx64.efi
sudo cp /usr/share/shim-signed/mmx64.efi /boot/efi/BOOT/
- .key EFI バイナリに署名するための PEM 形式の秘密鍵。
- .crt sbsign で使うための PEM 形式の証明書。
- .cer MokManager で使うための DER 形式の証明書。
# sbsigntools がなければインストールします
sudo pacman -S sbsigntools
# Machine Owner Key がなければつくります
mkdir -p ~/MOK; cd ~/MOK
openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=my Machine Owner Key/" -out MOK.crt
openssl x509 -outform DER -in MOK.crt -out MOK.cer
# ブートローダーとカーネルに署名(~/MOK 内で実行してください)
sudo sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-6.17-x86_64 /boot/vmlinuz-6.17-x86_64
sudo sbsign --key MOK.key --cert MOK.crt --output /boot/efi/BOOT/grubx64.efi /boot/efi/BOOT/grubx64.efi
# 1度めは
Signing Unsigned original image
# 2度めは
Image was already signed; adding additional signature
# 鍵の登録の予約をします。登録されるのは再起動のときです。
sudo mokutil --import MOK.cer
# 再起動して MokManager のメニューを選んで enroll MOK してください。それからシステムを起動させます。
# 起動したら鍵の確認です
sudo mokutil --test-key MOK.cer
MOK.cer is already enrolled
sudo mokutil --list-enrolled
# shim の認証プロセスの有効化の予約です。
# パスワードは 12345678 にしておけば簡単です
sudo mokutil --enable-validation
# 再起動して MokManager のメニューを選んで進みますがパスワードを尋ねられますが、ちょっと変わってます。
# 例えば 3番めの文字 とか要求されますが 3をタイプしてEnterを押します。
# 5番めの文字 なら 5をタイプしてEnterを押します。
Shim + mokutil + standalone GRUB
GRUB/ヒントとテクニック(ArchWiki) より GRUBスタンドアロン
$ echo 'configfile ${cmdpath}/grub.cfg' > /tmp/grub.cfg
$ sudo grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="part_gpt part_msdos" \
--locales="en@quot" --themes="" -o "/boot/efi/BOOT/grubx64.efi" "/boot/grub/grub.cfg=/tmp/grub.cfg" -v \
--sbat /usr/share/grub/sbat.csv
$ sudo cp /boot/grub/grub.cfg /boot/efi/BOOT/
$ cd ~/MOK
$ sudo sbsign --key MOK.key --cert MOK.crt --output /boot/efi/BOOT/grubx64.efi /boot/efi/BOOT/grubx64.efi
これで Secure Boot はできますが、grubenv がないといってきます。
Systemd-boot + sbctl
systemd-boot(ArchWiki) ESP が /boot になっているものとします。
$ sudo bootctl install
Created "/boot/EFI/systemd".
Created "/boot/loader".
Created "/boot/loader/keys".
Created "/boot/loader/entries".
Created "/boot/EFI/Linux".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/systemd/systemd-bootx64.efi".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/BOOT/BOOTX64.EFI".
⚠ Mount point '/boot' which backs the random seed file is world accessible, which is a security hole! ⚠
⚠ Random seed file '/boot/loader/.#bootctlrandom-seedd2e2XXXXXXXXXXXX' is world accessible, which is a security hole! ⚠
Random seed file /boot/loader/random-seed successfully written (32 bytes).
Successfully initialized system token in EFI variable with 32 bytes.
Created EFI boot entry "Linux Boot Manager".
基本的なローダー設定ファイルは、/usr/share/systemd/bootctl/loader.conf にあります。
sudo cp /usr/share/systemd/bootctl/loader.conf /boot/loader/loader.conf
sudo cp /usr/share/systemd/bootctl/manjaro.conf /boot/loader/entries/manjaro.conf
/boot/loader/loader.conf
default manjaro
timeout 4
console-mode max
editor no
/boot/loader/entries/manjaro.conf
title Manjaro Linux
linux /vmlinuz-6.17-x86_64
initrd /initramfs-6.17-x86_64.img
options root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rootfstype=ext4 add_efi_memmap
バージョン番号と UUID は書き換えてください。あとは署名して再起動です。
# 署名します。
$ sudo sbctl sign -s /boot/vmlinuz-6.17-x86_64
$ sudo sbctl sign -s /boot/EFI/BOOT/bootx64.efi
Unified kernel image
ユニファイドカーネルイメージ(UKI)はブートに必要なファイルを1つにまとめたものです。ユニファイドカーネルイメージ(ArchWiki)
手動で作成
カーネルコマンドラインの設定です。別の方法で設定することもできるようですが、その場合も空の /etc/kernel/cmdline をつくっておいてください。
/etc/kernel/cmdline
root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw quiet bgrt_disable
あるいはフォーマットのときに付けたラベルで次のようにもできます。
/etc/kernel/cmdline
root=LABEL=rootSHIBA rw quiet bgrt_disable
mkinitcpio のポストフックで sbctl が署名しますが必要ないので /usr/lib/initcpio/post/sbctl を削除しました。pacmanフックで sbctl が署名しますが必要ないので /usr/share/libalpm/hooks/zz-sbctl.hook を削除しました。
ArchWiki からスクリプトをつくりました。var=6.18 をカーネルのバージョンに書き換えてください。/boot/intel-ucode.img もintelのCPUでなければ書き換えます。実行権限をつけて sudo で実行します。
~/uki.sh
#!/usr/bin/bash
var=6.18
cat /boot/intel-ucode.img /boot/initramfs-$var-x86_64.img > /tmp/combined_initrd.img
mkdir -p /boot/efi/Linux
mkdir -p /boot/efi/BOOT
align="$(objdump -p /usr/lib/systemd/boot/efi/linuxx64.efi.stub | awk '{ if ($1 == "SectionAlignment"){print $2} }')"
align=$((16#$align))
osrel_offs="$(objdump -h "/usr/lib/systemd/boot/efi/linuxx64.efi.stub" | awk 'NF==7 {size=strtonum("0x"$3); offset=strtonum("0x"$4)} END {print size + offset}')"
osrel_offs=$((osrel_offs + "$align" - osrel_offs % "$align"))
cmdline_offs=$((osrel_offs + $(stat -Lc%s "/usr/lib/os-release")))
cmdline_offs=$((cmdline_offs + "$align" - cmdline_offs % "$align"))
splash_offs=$((cmdline_offs + $(stat -Lc%s "/etc/kernel/cmdline")))
splash_offs=$((splash_offs + "$align" - splash_offs % "$align"))
initrd_offs=$((splash_offs + $(stat -Lc%s "/usr/share/systemd/bootctl/splash-manjaro.bmp")))
initrd_offs=$((initrd_offs + "$align" - initrd_offs % "$align"))
linux_offs=$((initrd_offs + $(stat -Lc%s "/tmp/combined_initrd.img")))
linux_offs=$((linux_offs + "$align" - linux_offs % "$align"))
objcopy \
--add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=$(printf 0x%x $osrel_offs) \
--add-section .cmdline="/etc/kernel/cmdline" \
--change-section-vma .cmdline=$(printf 0x%x $cmdline_offs) \
--add-section .splash="/usr/share/systemd/bootctl/splash-manjaro.bmp" \
--change-section-vma .splash=$(printf 0x%x $splash_offs) \
--add-section .initrd="/tmp/combined_initrd.img" \
--change-section-vma .initrd=$(printf 0x%x $initrd_offs) \
--add-section .linux="/boot/vmlinuz-$var-x86_64" \
--change-section-vma .linux=$(printf 0x%x $linux_offs) \
"/usr/lib/systemd/boot/efi/linuxx64.efi.stub" "/boot/efi/Linux/linux.efi"
rm /tmp/combined_initrd.img
うまくいけば /boot/efi/Linux/linux.efi ができるはずです。署名して /boot/efi/BOOT/BOOTX64.efi にコピーするなどしてください。
PreLoader + UKI
Microsft の署名がある PreLoader と UKI で起動する方法です。
# もしなければ 署名済み reloader のインストール
yay -S preloader-signed
# linux.efi は署名なしでかまいません
sudo cp /boot/efi/Linux/linux.efi /boot/efi/BOOT/loader.efi
sudo cp /usr/share/preloader-signed/PreLoader.efi /boot/efi/BOOT/BOOTX64.efi
sudo cp /usr/share/preloader-signed/HashTool.efi /boot/efi/BOOT
ukify で半自動で作成
ukify を使ったほうが簡単です。SBATセクションをつければ Shim で起動もできます。その場合は ##sbctl のところをコメントアウトして、##Shim のところの # を消してください。/etc/kernel/cmdline の設定を忘れずに。それと MOK の中身を /var/lib/MOK の中にコピーしておいてください。PreLoader の場合も同様です。カーネルなどブートに関係したものがアップデートされたら sudo をつけて実行してください。
# なければインストールします
sudo pacman -S systemd-ukify
~/ukify.sh
#!/usr/bin/bash
var=6.18
mkdir -p /boot/EFI/Linux
mkdir -p /boot/EFI/BOOT
ukify build \
--linux=/boot/vmlinuz-$var-x86_64 \
--os-release=@/usr/lib/os-release \
--cmdline=@/etc/kernel/cmdline \
--initrd=/boot/intel-ucode.img \
--initrd=/boot/initramfs-$var-x86_64.img \
--splash=/usr/share/systemd/bootctl/splash-manjaro.bmp \
--uname=$var-MANJARO \
--sbat='sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md
uki.author.myimage,1,UKI for System,uki.author.myimage,1,https://uapi-group.org/specifications/specs/unified_kernel_image/' \
--output=/boot/EFI/Linux/linux.efi
##sbctl
mv /boot/EFI/Linux/linux.efi /boot/EFI/BOOT/BOOTX64.efi
sbctl sign /boot/EFI/BOOT/BOOTX64.efi
##Shim
#mv /boot/EFI/Linux/linux.efi /boot/EFI/BOOT/grubx64.efi
#sbsign --key /var/lib/MOK/MOK.key --cert /var/lib/MOK/MOK.crt \
#--output /boot/EFI/BOOT/grubx64.efi /boot/EFI/BOOT/grubx64.efi
#cp /usr/share/shim-signed/shimx64.efi /boot/EFI/BOOT/BOOTX64.efi
#cp /usr/share/shim-signed/mmx64.efi /boot/EFI/BOOT/
##PreLoader
#mv /boot/EFI/Linux/linux.efi /boot/EFI/BOOT/loader.efi
#cp /usr/share/preloader-signed/PreLoader.efi /boot/EFI/BOOT/BOOTX64.efi
#cp /usr/share/preloader-signed/HashTool.efi /boot/EFI/BOOT
ファームウェアのエントリーが必要なら次のようにつくれます。sdx は置き換えてください。
sudo efibootmgr --create --disk /dev/sdx --part 1 --loader '\EFI\BOOT\BOOTX64.EFI' \
--label 'SHIBA' --unicode
mkinitcpio ポストフックで自動作成
/usr/lib/initcpio/post に入れてもいいらしいのですがカスタムフックは /etc/initcpio/post に入れるらしいです。実行権限をつけてください。これで sudo mkinitcpio -P だけで UKI をつくってくれます。(pacman がカーネルをアップデートしたときも自動で UKI をつくります。はずだったのですが pacman -Syu でこのファイルは消されてしまいました。)ESP は /boot にしてます。
/etc/initcpio/post/ukifyCustom
#!/usr/bin/bash
#echo "1: $1"
#echo "2: $2"
#echo "3: $3"
#echo "KERNELVERSION: $KERNELVERSION"
#echo "KERNELDESTINATION: $KERNELDESTINATION"
echo "UKI をつくらせていただきます"
mkdir -p /boot/EFI/Linux
mkdir -p /boot/EFI/BOOT
ukify build \
--linux=$1 \
--os-release=@/usr/lib/os-release \
--cmdline=@/etc/kernel/cmdline \
--initrd=/boot/intel-ucode.img \
--initrd=$2 \
--splash=/usr/share/systemd/bootctl/splash-manjaro.bmp \
--uname=$KERNELVERSION \
--sbat='sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md
uki.author.myimage,1,UKI for System,uki.author.myimage,1,https://uapi-group.org/specifications/specs/unified_kernel_image/' \
--output=/boot/EFI/Linux/linux.efi
##sbctl
mv /boot/EFI/Linux/linux.efi /boot/EFI/BOOT/BOOTX64.efi
sbctl sign /boot/EFI/BOOT/BOOTX64.efi
##Shim
#mv /boot/EFI/Linux/linux.efi /boot/EFI/BOOT/grubx64.efi
#sbsign --key /var/lib/MOK/MOK.key --cert /var/lib/MOK/MOK.crt \
#--output /boot/EFI/BOOT/grubx64.efi /boot/EFI/BOOT/grubx64.efi
#cp /usr/share/shim-signed/shimx64.efi /boot/EFI/BOOT/BOOTX64.efi
#cp /usr/share/shim-signed/mmx64.efi /boot/EFI/BOOT/
##PreLoader
#mv /boot/EFI/Linux/linux.efi /boot/EFI/BOOT/loader.efi
#cp /usr/share/preloader-signed/PreLoader.efi /boot/EFI/BOOT/BOOTX64.efi
#cp /usr/share/preloader-signed/HashTool.efi /boot/EFI/BOOT
ちなみにつぎのように FONT を設定しておくと mkinitcpio でコンソールフォントが設定されてないというワーニングが出なくなります。
/usr/lib/initcpio/hooks/consolefont
KEYMAP=jp106
FONT=eurlatgr
FONT_MAP=
GPT partition automounting
systemd#GPT partition automounting(ArchWiki英)(2026年2月上旬で日本語版の内容は古いので英語版を参照しました) システムのブート時にESPと同じ物理ドライブから rootパーティション などを探し出して自動でマウントしてくれる機能です。これにより標準のマウントでは /etc/fstab に設定しておく必要がなくなります。カスタム設定の場合でも UUID などのパーティション固有の情報は必要ありません。
ESP は /boot にマウントして UKI でブートするという前提です。
fstab(ArchWiki英) によるとカスタムのオプションは次のように指定するそうです。
/etc/fstab
/dev/disk/by-designator/root / ext4 defaults,noatime 0 1
/dev/disk/by-designator/swap none swap defaults,discard 0 0
自分はとりあえず次のようにしておきました。
/etc/fstab
/dev/disk/by-designator/esp /boot vfat umask=0022 0 2
/dev/disk/by-designator/root / ext4 defaults,noatime 0 1
UAPI.2 The Discoverable Partitions Specification (DPS) を参考にGPTパーティションタイプを指定しなければなりません。
EFI System Partition c12a7328-f81f-11d2-ba4b-00a0c93ec93b SD_GPT_ESP
Extended Boot Loader Partition bc13c2ff-59e6-4262-a352-b275fd6f7172 SD_GPT_XBOOTLDR
Root Partition (amd64/x86_64) 4f68bce3-e8cd-4db1-96e7-fbcaf984b709 SD_GPT_ROOT_X86_64
parted を使いました。/dev/sdx は lsblk -f などで確認して置き換えてください。
sudo parted /dev/sdx
(parted) type 1 c12a7328-f81f-11d2-ba4b-00a0c93ec93b
(parted) type 2 4f68bce3-e8cd-4db1-96e7-fbcaf984b709
(parted) quit
mkinitcpio に systemdフックを設定しなければなりません。mkinitcpio(ArchWiki英)
mkinitcpio -L
==> Available hooks
acpi_override encrypt lvm2 plymouth-encrypt¹ sd-verity
autodetect filesystems mdadm_udev plymouth-shutdown sd-volatile
base fsck memdisk resume shutdown
bcachefs haveged microcode sd-encrypt sleep
block hostdata modconf sd-encrypt-opensc strip
btrfs keyboard openswap sd-plymouth² systemd
consolefont keymap ostree sd-shutdown udev
dmraid kms plymouth sd-vconsole usr
'¹' This hook is deprecated in favor of 'encrypt'
'²' This hook is deprecated in favor of 'plymouth'
mkinitcpio -H systemd
==> Help for hook 'systemd':
This will install a basic systemd setup in your initramfs, and is meant to
replace the 'base', 'usr', 'udev' and 'resume' hooks. Other hooks with runtime
components will need to be ported, and will not work as intended. You also may
wish to still include the 'base' hook (before this hook) to ensure that a
rescue shell exists on your initramfs.
HOOKS配列を書き換えます。base udev を systemd に置き換え、keymap consolefont を sd-vconsole に置き換えます。plymouth はうまく機能しないようなので削除しました(ただし /var/log/boot.log を作りません)。Plymouth(ArchWiki英), Silent boot(ArchWiki英)
/etc/mkinitcpio.conf
#HOOKS=(base udev autodetect modconf kms block keyboard keymap consolefont plymouth filesystems fsck)
HOOKS=(systemd autodetect modconf kms block keyboard sd-vconsole filesystems fsck)
カーネルコマンドラインは空で構いません。
/etc/kernel/cmdline
最後に mkinitcpio (UKI も作るように設定してます)してからシステムの再起動です。
sudo mkinitcpio -P
dmesg から次のメッセージをみつけました。ASPM は BIOS の Power の設定で PCIe ASPM Support を Enable から Disable に変えました。でもこのメッセージは出ます。supply vcc は対処法はわかりません。
[ 0.270226] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[ 17.638961] at24 10-0050: supply vcc not found, using dummy regulator
近頃のパッケージ
- AppImage 公式サイト AppImages AppImageHub
- Flatpak 公式サイト Flathub
- Snapcraft 公式サイト
- Flatpak - ArchWiki
- Snap - ArchWiki
どれも多くの Linux ディストリビューションで動作し、依存ファイルを含んでいます。
AppImage
AppImage が最も手軽で windows のポータブルアプリに近いです。root権限を必要とせず、どこからでも起動できます。ただしサンドボックスで実行されるわけではありません。ディスクイメージのようになっていて、FUSE (Filesystem in Userspace) という仕組みでマウントされるそうです。ダウンロードした AppImageファイルは実行権限を与える必要があり、GUI からもできますが、次のコマンドでもできます。
chmod a+x *.AppImage
- ATOM Sunsetting Atom ferion11/atom_Appimage: Atom Appimage for linux 64bits Atom Community
- PULSAR (AppImage版もあります)
- zilti/code-oss.AppImage
Atom Editor をダウンロードしましたが次のように起動できます。
# 起動すると /tmp/atom-fcff66f2ff73.sock のようなファイルがつくられます。
./atom*.AppImage
# マウントして中身を見ることができます。
# /tmp/.mount_atom-v7RPCeN のような表示があり、そこにマウントされます。Ctrl-C で終了します。
atom-v1.63.1-x86_64.AppImage --appimage-mount
# その場所に squashfs-root/ をつくり展開します。
# スクリプトファイル squashfs-root/AppRun で起動できます。
atom-v1.63.1-x86_64.AppImage --appimage-extract
# /tmp/appimage_extracted_ffe170e536c3b7ba5b9dab6ffb6b555a のようなフォルダに展開してから実行されます。
# /tmp は通常Ram上にあるので、起動してしまえば高速動作が期待できます。ただし、展開すると大きくなるので注意が必要です。
# help にも出てこないので隠しオプションでしょうか?
atom-v1.63.1-x86_64.AppImage --appimage-extract-and-run
# 次のようにフォルダを AppImageファイルと同じフォルダにつくっておくと
# 設定ファイルをそこに作ってくれるそうです(portable mode)。
atom-v1.63.1-x86_64.AppImage.home
atom-v1.63.1-x86_64.AppImage.config
# 上記のフォルダを作るコマンドです。
atom-v1.63.1-x86_64.AppImage --appimage-portable-home
atom-v1.63.1-x86_64.AppImage --appimage-portable-config
# ヘルプの表示
atom-v1.63.1-x86_64.AppImage --appimage-help
Firejail で Atom Editor を起動する場合。(日本語入力できません。profile の変更の必要があります。ですが、Wayland では必要ないです。)
firejail --appimage --profile=atom atom*.AppImage
次のように起動できるものもあります。
firejail gvim --appimage-extract-and-run
AppImageKit/README.md も参考になりそうです。
~/AppImage をつくってそこに実行可能にした AppImage をいれておきます。~/AppImage-bin にパスを通しておいて、各AppImageの起動スクリプトをつくっておきます。.desktop の Exec には ~/AppImage-bin から起動するように設定しておきます。~/AppImage-bin/atom の例です。この方法は簡単かつ柔軟だと思うのですが…
#! /usr/bin/bash
exec firejail --appimage --profile=atom ~/AppImage/atom*.AppImage "$@"
Flatpak
Flatpak(ArchWiki) はサンドボックスで実行されます。「Flatpak はアプリケーションとランタイムを管理するためのツールです。」「Flatpak は OSTree を使用してデータを配布・デプロイします」正式な文書は Flatpak documentation にあります。
# リポジトリの追加
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# リポジトリの一覧表示
flatpak remotes
# リポジトリの appstream データの取得、ランタイムとアプリケーションのアップデート
flatpak update
# リポジトリの packagename パッケージを検索
flatpak search packagename
# remote という名前のリモートリポジトリに存在するランタイムとアプリケーションを確認
latpak remote-ls remote
# remote から name パッケージをインストール
flatpak install remote name
# インストールされたランタイムとアプリケーションの確認(ID の表示)
flatpak list
# インストールされたアプリケーションのみ表示(ID の表示)
flatpak list --app
# ID を実行
flatpak run ID
# ID をアップデート
flatpak update ID
# ID をアンインストール
flatpak uninstall ID
# アンインストール時に ~/.var/app とパーミッションストアのアプリデータを削除
flatpak uninstall --delete-data ID
# アプリケーションによって使われなくなったランタイムとエクステンションを削除
flatpak uninstall --unused
# 修復する
flatpak repair
# 自動および手動更新を防止
flatpak mask ID
# 更新を再度有効にする
flatpak mask --remove ID
# ID のサンドボックス権限を表示する
flatpak info --show-permissions ID
# ID のサンドボックス権限を上書き
flatpak override --nofilesystem=home ID
# ID のサンドボックス権限をリセット
flatpak override --reset ID
パーミッション管理のGUIツールがあります。flatpak-kcm は KDEシステム設定で、セキュリティーとプライバシー の アプリケーションの権限 → Flatpak の権限 で設定できるようになります。flatseal は Plasma でなくても使えるツールで、アプリケーションメニューから直接起動できます。
pacman -S flatpak-kcm
yay -S flatseal
Snap
Snap(ArchWiki) は AppArmor を有効にしておかないとサンドボックスの機能はなく、システムへ無制限にアクセスできるそうです。Snap はカーネルを含むこともできます。(新しいパッケージの仕組み、Flatpakを使用する)
Snap版 vscode をインストールしてみました。Install code on Manjaro Linux の通りにやってみました。
sudo pacman -S snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install code --classic
error: too early for operation, device not yet seeded or device model not acknowledged
# というメッセージが出ました。少し待ってからもう一度やってみるとダウンロードが始まりました。
Warning: /var/lib/snapd/snap/bin was not found in your $PATH. If you've not restarted your session
since you installed snapd, try doing that. Please see https://forum.snapcraft.io/t/9469
for more details.
WARNING: There is 1 new warning. See 'snap warnings'.
# というメッセージが出たので、一度ターミナルを閉じてから次のコマンドです。
snap warnings
warning: |
the snapd.apparmor service is disabled; snap applications will likely not start.
Run "systemctl enable --now snapd.apparmor" to correct this.
# AppArmor を有効にしないと起動できないアプリがあるぞという警告のようです。
sudo systemctl enable --now snapd.apparmor
# vscode は AppArmorなしでも起動しました。アプリケーションメニューか、ターミナルで次のコマンド。
/var/lib/snapd/snap/bin/code
Firefoxを含むsnapパッケージとの付き合い方 などを参考にすると
- /var/lib/snapd/snaps に .snap ファイルがダウンロードされます。
- /var/lib/snapd/snap/<snapname> にマウントされます。
- /etc/systemd/system/multi-user.target.wants/ にシステム起動時に作成されたマウントユニットへのシンボリックリンクがあります。
- /var/snap/パッケージ名/ snapパッケージのシステム用データ領域
- ~/snap/パッケージ名/ snapパッケージのユーザー固有のデータ領域
# インストールされている snap の確認
snap list
# ローカルの野良 snap をインストール
snap install --dangerous /path/to/snap
# snap を手動でアップデート
snap refresh
# 最新/次のアップデート時間を確認
snap refresh --time
# snap を削除
snap remove snapname
アプリケーションメニューには自動では登録されませんでした。自分で登録するかターミナルで code と打ち込んで起動する必要があります。
自動でアップデートしようとしますが、それを完全に止めるには snapd.socket を disable にするしか方法がないようです。snap コマンドは使えなくなりますが、code は起動できました。他に問題を起こさないという保証はありません。
sudo systemctl disable --now snapd.socket
#再開するには次のコマンド
sudo systemctl enable --now snapd.socket
インストールした snap の権限は snap ストア で調整できます(できないのも多いようです)。インストール済み を選択してアプリケーションを選択、Permissions をクリックします。大まかな感じで、全ユーザー共通の設定になります。
sudo snap install snap-store
sandbox
Firejail
Firejail, Firejail(ArchWiki), FIREJAIL-PROFILE(5)
sudo pacman -S firejail
sudo pacman -S firetools
デフォルトのプロファイルは /etc/firejail/ にあり、カスタマイズしたものは ~/.config/firejail/ に置きます。
# Firejail で vlc を起動する
firejail vlc
# Firejail が使用中かを確認する
firejail --list
# より総合的な出力を得るには:
firejail --tree
Atom Editor を Firejail で起動すると日本語入力ができなくなる問題を調べてみました。FIREJAIL-PROFILE(5) Fcitx 5 DBus D-Bus
/etc/firejail/atom.profile は electron.profile を読み込む設定になっています。/etc/firejail/electron.profile をコピーして ~/.config/firejail/electron.profile とします。~/.config/firejail/electron.profile の中をのぞいてみると、
dbus-user none
と書かれた行があるのでコメントアウトします。これだけで日本語入力できるようになりましたが、fcitx だけを通す設定にしたほうがいいと思われます。(この書き換えは Wayland では必要ないようです。)
#dbus-user none
dbus-user filter
dbus-user.talk org.fcitx.*
これで atomのプロファイルから AppImage版 Pulsar Editor 用プロファイルも作れるとはずと思いましたがうまくいきません。 Issue with Pulsar profile #6105 では、firetools で作ったプロファイルで、seccomp を
seccomp !chroot
に変更すればいいそうです。Firejail を使うならこの方法になりそうです。ただ、堅牢性とかどうなのか心配ではあります。
軽量画像ビューア qView の AppImage版をダウンロードしました。
firejail --build --appimage qView-6.1-x86_64.AppImage > qview.profile
で qView を起動して、いろいろな機能を使ってから終了させます。qview.profile を Editor で開いて
--- Built profile begins after this line ---
より下の部分のみを残して削除します。ファイルを移動して ~/.config/firejail/qview.profile とします。次のコマンドで起動し、メッセージを読んで qview.profile を修正します。
firejail --appimage --profile=qview qView-6.1-x86_64.AppImage
whitelist ${HOME}/.. は削除します。その他の whitelist も削除できるものは削除したほうがいいでしょう。面倒ではありますが、Electronアプリ以外では --build オプションが使える場合があります。
AppArmor のサポートを有効化する には、AppArmor を有効にしたうえで次のコマンド。
sudo apparmor_parser -r /etc/apparmor.d/firejail-default
AppArmor のサポートを無効化(上記コマンドの取り消し)する には。
sudo apparmor_parser -R /etc/apparmor.d/firejail-default
Firejail はアンインストールしました。
sudo pacman -Rsn firejail firetools
Bubblejail
yay -S bubblejail
GUI による設定アプリはターミナルでコマンド bubblejail-config またはアプリケーションメニューで Bubblejail Configuration を探すことで起動できます。
firefox のインスタンスを作成してみます。インスタンスは ~/.local/share/bubblejail/instances/ に作られます。(右はしの firefox の方がインスタンスの名前です)
bubblejail create --profile firefox firefox
Updating desktop MIME database
Import tips: Move .mozilla folder from your home directory in to instance
home directory.
デスクトップエントリを作りたくない場合は --no-desktop-entry オプションを付けます。~/.local/share/applications/firefox.desktop が作られますが、firefox_bubble.desktop のようにファイル名を変えておけば通常起動もできます(でも bubblejail を使っているのかどうかわからなくなるので、やらない方がいいです)。
~/.local/share/applications/firefox.desktop
Name=firefox bubble
Name[ja]=Firefox ウェブ・ブラウザ
Name[ja]=Firefox ウェブ・ブラウザ を Name[ja]=Firefox bubble に書き換えたほうがよさそうです。
bubblejail で firefox を起動するには次のようにします。ここの firefox は bubblejail のインスタンスの名前です。
bubblejail run firefox
実行するプログラムに引数を渡す場合は、インスタンス名と実行するプログラムも必ず指定しなければならないようです。ArchWiki の説明だと誤解しそうです。次のは例です。
bubblejail run firefox firefox google.com
bubblejail-config で bubblyfirefox を選択して Fcitx/Fcitx5 input method をチェックして save します。(IBus input method もあります。)Home Share で .mozilla と .cache を付け足すと通常起動の Firefox と設定とキャッシュが共用できます。Wayland を使っている場合は、Wayland windowing system をチェックしてください、しないと Firefox の起動が異常に遅くなります。
詳しくは man bubblejail と man bubblejail.services でマニュアルを読んでください。用意されているプロファイルのリストは次のコマンドで表示されます。
bubblejail list profiles
firefox_wayland
steam
chromium
generic
firefox
transmission-gtk
code_oss
lutris
Tor Ploject の Tor Browse を Bubblejail で使う方法が Example: setting up Torbrowser に説明されているので試してみました。
ターミナルから次のコマンドを実行して、インスタンスを作成します。
[username@hostname ~] bubblejail create --no-desktop-entry --profile generic tor_browser
サンドボックス内からターミナルを起動します。alacritty, foot, konsole のどれでもいいのですが gnome-terminal は D-Bus へアクセスしようとするので使えないそうです。
[username@hostname ~] bubblejail run tor_browser alacritty
Download Tor Browser から Linux版をダウンロードしてきて ~/.local/share/bubblejail/instances/tor_browser/home に配置して、展開します(ファイル名は実際のものに書き換えてください)。
[sandbox ~] tar --verbose --extract --file ./tor-browser-linux-x86_64-13.0.15.tar.xz
Tor Browser をサンドボックス内から起動します。
[sandbox ~] cd tor-browser
[sandbox ~] ./start-tor-browser.desktop
一度起動するとサンドボックス内の ~/.local/share/applications/ に desktop entry が作られるみたいなことが書かれていますが、作られません。次のコマンドでサンドボックスの外の ~/.local/share/applications/ に desktop entry が作られるはずなのですが、
[username@hostname ~] bubblejail generate-desktop-entry --desktop-entry ~/.local/share/bubblejail/instances/tor_browser/home/.local/share/applications/start-tor-browser.desktop tor_browser
パスを変えた次のコマンドで desktop entry を作ります。
[username@hostname ~] bubblejail generate-desktop-entry --desktop-entry ~/.local/share/bubblejail/instances/tor_browser/home/tor-browser/start-tor-browser.desktop tor_browser
desktop entry をエディッタで開いて
[username@hostname ~] nano ~/.local/share/applications/start-tor-browser.desktop
次のようになっている行を
Icon=/home/username/tor-browser/Browser/browser/chrome/icons/default/default128.png
次のように書き換えます。(アイコンのパスを書き換えます)
Icon=/home/username/.local/share/bubblejail/instances/tor_browser/home/tor-browser/Browser/browser/chrome/icons/default/default128.png
セーブして閉じます。データベースの更新を一応しておきます。
[username@hostname ~] update-desktop-database ~/.local/share/applications/
これでアプリケーションメニューから tor browser bubble を選んで起動できます。ダウンロードしたものは ~/.local/share/bubblejail/instances/tor_browser/home/tor-browser/Browser/ダウンロード/ に入ってたりと面倒です。
AppArmor
AppArmor(wikipedia) によると、 カーネルパラメータ(wikipedia)を設定する必要があるそうです。
lsm=landlock,lockdown,yama,apparmor,bpf
カーネルをコンパイルするとき、以下のオプションを設定する必要があります。
CONFIG_SECURITY_APPARMOR=y
CONFIG_AUDIT=y
カーネルパラメータでの設定を不必要にするには次のオプションの設定が必要です。
CONFIG_LSM="landlock,lockdown,yama,apparmor,bpf"
カーネルに設定された lsm= 値は zgrep CONFIG_LSM= /proc/config.gz で、現在の値は cat /sys/kernel/security/lsm です。
zgrep CONFIG_LSM= /proc/config.gz
CONFIG_LSM="landlock,lockdown,yama,integrity,bpf"
cat /sys/kernel/security/lsm
capability,landlock,lockdown,yama,bpf%
次のコマンドで apparmor module is loaded. と言ってるので、カーネルに apparmor が組み込まれているようです。
$ aa-status
apparmor module is loaded.
apparmor filesystem is not mounted.
結局どうするかというと(この部分は失敗するとシステムが起動しなくなるかもしれません。くれぐれも慎重に)、自分の場合は GRUB を使っているので /etc/default/grub を開いて
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash udev.log_priority=3"
となっているところに付け足して
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash udev.log_priority=3 lsm=landlock,lockdown,yama,apparmor,bpf"
に変えて保存します。それから次のコマンドで /boot/grub/grub.cfg ファイルを自動生成します。
sudo grub-mkconfig -o /boot/grub/grub.cfg
システムを再起動して、次のコマンドで確認します。
$ aa-enabled
Yes
$ aa-status
apparmor module is loaded.
You do not have enough privilege to read the profile set.
$ sudo aa-status
# AppArmor を有効にする
sudo systemctl enable --now apparmor.service
sudo systemctl enable --now snapd.apparmor.service
# AppArmor を無効にする
sudo systemctl disable --now apparmor.service
sudo systemctl disable --now snapd.apparmor.service
AppArmor を使えるようにすることはできました。プロファイルの調整方法はこれからの課題ということで。パート IV AppArmor による権限の制限 という SESU Linux の文書があったのでこれを勉強するべきでしょうか。第798回 Ubuntuのセキュリティを支えるAppArmor入門
bubblewrap
アプリケーションパッケージ自体は bubblewrap と呼ばれますが、実際の実行バイナリや man ページで使われている名前は bwrap です。
AppImage を bubblewrap で実行する方法がわかったので、なるべく bubblewrap を使う方針にしました。パッケージ squashfuse をインストールします。
sudo pacman -S squashfuse
~/bin/bwrap/qview をつくって実行権限を与えておきます。設定はゆるゆるですが、そのぶん短時間で設定をつくれます。bubblewrap は起動がはやいです。
~/bin/bwrap/qview
#!/usr/bin/bash
AppImage=$HOME/AppImage/qView-*-x86_64.AppImage
Name=qview
Id=$(/usr/bin/id -u)
Point=$HOME/.cache/mnt/$Name-$(uuidgen)
/usr/bin/mkdir -p $Point
/usr/bin/squashfuse -o offset=$($AppImage --appimage-offset) $AppImage $Point
/usr/bin/bwrap \
--setenv QT_QPA_PLATFORM xcb \
--ro-bind / / \
--bind /run/user/$Id /run/user/$Id \
--bind $HOME/.config/qView $HOME/.config/qView \
--dev /dev \
--dev-bind /dev/dri /dev/dri \
--proc /proc \
--unshare-all \
$Point/AppRun "$@"
/usr/bin/fusermount -u $Point
/usr/bin/rmdir $Point
uuidgen よりも mktemp というコマンドを使った方がいいのかも。/tmp 内にマウントすることにしました。
~/bin/bwrap/qview
#!/usr/bin/bash
AppImage=$HOME/AppImage/qView-*-x86_64.AppImage
Name=qview
Id=$(/usr/bin/id -u)
Point=$(/usr/bin/mktemp -p /tmp -d ".mount_$Name-XXXXXXXXXX")
/usr/bin/squashfuse -o offset=$($AppImage --appimage-offset) $AppImage $Point
/usr/bin/bwrap \
--setenv QT_QPA_PLATFORM xcb \
--ro-bind / / \
--bind /run/user/$Id /run/user/$Id \
--bind $HOME/.config/qView $HOME/.config/qView \
--dev /dev \
--dev-bind /dev/dri /dev/dri \
--proc /proc \
--unshare-all \
$Point/AppRun "$@"
/usr/bin/fusermount -u $Point
/usr/bin/rmdir $Point
zsync2
rsync (wikipedia) と同様の方法ですでにダウンロードしてある過去バージョンと違う部分だけをダウンロードして新バージョンにします。ただし .zsync ファイルが必要です。
zsync は https にアクセスできないようです。zsync2 が必要になりますが、AUR にあるのは curl とファイルが衝突すると言ってインストールできませんでした。探してみると AppImage版 zsync2 があったのでダウンロードして試してみました。zsync2 で起動するようにして、次の形のコマンドで成功しました。新しいファイルはカレントディレクトリにつくられます。AppImage版vimのアップグレードが半分より少し多い程度のダウンロードで済みました。
zsync2 -i path/oldVersionFile https://url/xxxx.zsync
Application menu
デスクトップエントリ(ArchWiki) によると、アプリケーションメニューは Freedesktop.org Specifications にある仕様に基づいており Desktop Entry Specification と Desktop Menu Specification を知る必要があるようです。XDG 関係のディレクトリは XDG Base Directory(ArchWiki) が参考になります。
AppImage をアプリケーションメニューから起動できるようにすることと、AppImage 専用のサブメニューをつくることが目的です。
通常アプリケーションの名のついた .desktop ファイルとそのアイコン、サブメニューの項目名に対応する .directory ファイルとそのアイコン、メニューの構造を XML で記述した .menu ファイルがあります。アイコンは用意しなくても何か代わりのアイコンを使ってくれるようですが、できれば 48x48 の PNG 画像があったほうがいいです。
- ユーザー定義の(マージする) .menu ファイルは
~/.config/menus/application-merged/に入れます。 - ユーザー定義の .directory ファイルは
~/.local/share/desktop-directories/に入れます。 - ユーザー定義の .desktop ファイルは
~/.local/share/applications/に入れます。 - ユーザー定義のアイコンは
~/.local/share/icons/に入れます。
- システムの .menu ファイルは
/etc/xdg/menus/にあります。 - システムの .directory ファイルは
/usr/share/desktop-directories/にあります。 - システムの .desktop ファイルは
/usr/share/applications/にあります。 - システムのアイコンは
/usr/share/icons/や/usr/share/pixmaps/にあります。
.menu の場所
まず .menu ファイルの位置を探します。次のように仕様書で定義されています。
$XDG_CONFIG_DIRS/menus/${XDG_MENU_PREFIX}applications.menu
${XDG_MENU_PREFIX} は(自分の環境では)未定義です(いつのまにか plasma- がセットされていました)が、"gnome-" とか "kde-" にしてデスクトップ環境によって使い分けできるようになっています。$XDG_CONFIG_DIRS を調べてみると(自分の環境では)
echo $XDG_CONFIG_DIRS
/home/USERNAME/.config/kdedefaults:/etc/xdg:/usr/share/manjaro-kde-settings/xdg
~/.config/kdedefaults/menus/plasma-applications.menu を作っておけば、これが個人用として優先して使われるようです(試してませんが)。作ってなければ標準の /etc/xdg/menus/plasma-applications.menu が使われます。デフォルトの場所にあるメニューもマージしてくれます。そのデフォルトの場所とは
$XDG_CONFIG_DIRS/menus/applications-merged/
ですが、$XDG_CONFIG_HOME がセットされていないなら $HOME/.config が sysconfdir になり、
sysconfdir/menus/application-merged/
の中もシステムは探してくれるそうです。
~/.config/menus/application-merged/user.menu です。
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
<Menu>
<Name>Applications</Name>
<Menu>
<Name>AppImage</Name>
<Directory>AppImage.directory</Directory>
<Include>
<Category>X-AppImage</Category>
</Include>
</Menu>
</Menu>
.directory の場所
.directory ファイルを置く場所については次の定義があります。
$XDG_DATA_DIRS/desktop-directories/
$XDG_DATA_DIRS を調べてみると(自分の環境では)
echo $XDG_DATA_DIRS
/home/USERNAME/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/var/lib/snapd/desktop
ですが、$XDG_DATA_HOME がセットされていないなら $HOME/.local/share/ が datadir になり、
datadir/desktop-directories/
の中もシステムは探してくれるそうです。
~/.local/share/desktop-directories/AppImage.directory です。
[Desktop Entry]
Icon=AppImage
Name=AppImage
.desktop の場所
.desktop ファイルを置く場所については次の定義があります。
$XDG_DATA_DIRS/applications/
ですが、$XDG_DATA_HOME がセットされていないなら $HOME/.local/share/ が datadir になり、
datadir/applications/
の中もシステムは探してくれるそうなのです。~/.local/share/applications/ に .desktop ファイルを置くことにしました。
~/.local/share/applications/gvim.desktop です。
[Desktop Entry]
Type=Application
Name=GVim
GenericName=テキストエディッタ
Exec=/home/USER_NAME/.local/AppImage-bin/gvim -f %F
Terminal=false
Icon=gvim
Categories=Utility;TextEditor;X-AppImage;
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
MimeType などは展開した AppImage の .desktopファイルを読めばいいです。Categories に X-AppImage を追加しておきます。
次のコマンドで検証します。これをやって自分で作ったカテゴリーは X- で始めるのが作法と知りました。
desktop-file-validate ./gvim.desktop
インストールします。
desktop-file-install --dir=$HOME/.local/share/applications ./gvim.desktop
データベースの更新です。
update-desktop-database -v ~/.local/share/applications
同様に .desktopファイルをつくればメニューに登録されるはずです。
icon の場所
アイコンの置き場所は次の3つが標準のようです。
$HOME/.icons (後方互換性のため)
$XDG_DATA_DIRS/icons
/usr/share/pixmaps
ですが、$XDG_DATA_DIRS が定義されていないので ~/.local/share/icons/ も読み込んでくれるようです。$HOME/.icons は無視されるようなのですが…。AppImage 公式サイト のトップに AppImageのアイコン画像(SVG)があるので、それをダウンロードして、SVG to PNG / ものおき で等倍で 48x48 のPNGに変換しました。それを AppImage.png として ~/.local/share/icons/ に入れておきます。
GVIm のAppImageファイルを展開(xxxx.AppImage --appimage-extract)して 48x48 のアイコンをとりだしました。gvim.png として ~/.local/share/icons/ に入れておきます。
XDG ユーザーディレクトリ
XDG ユーザーディレクトリ(ArchWiki) によるとログインしたときの早い段階で次のコマンドが実行されます。
xdg-user-dirs-update
これにより2つの設定ファイルが(おそらく、なければ)つくられます。~/.config/user-dirs.locale と ~/.config/user-dirs.dirs です。それと、~/.config/user-dirs.dirs に設定されているディレクトリが(もし、なければ)つくられます。
~/.config/user-dirs.locale は次の1行だけです。
ja_JP
~/.config/user-dirs.dirs は次のようになっていました。
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/デスクトップ"
XDG_DOWNLOAD_DIR="$HOME/ダウンロード"
XDG_TEMPLATES_DIR="$HOME/テンプレート"
XDG_PUBLICSHARE_DIR="$HOME/公開"
XDG_DOCUMENTS_DIR="$HOME/ドキュメント"
XDG_MUSIC_DIR="$HOME/音楽"
XDG_PICTURES_DIR="$HOME/画像"
XDG_VIDEOS_DIR="$HOME/ビデオ"
ディレクトリ名を英語にしたいときは次のコマンドを実行します。--force オプションは設定ファイルがすでにあっても作り直すという意味のようです。
LC_ALL=C xdg-user-dirs-update --force
~/.config/user-dirs.locale は次の1文字だけになります。
C
~/.config/user-dirs.dirs は次のようになっていました。
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
ディレクトリ名を日本語に戻したいときは次のコマンドを実行します。または ~/.config/user-dirs.locale と ~/.config/user-dirs.dirs を削除してから、ログアウト、ログインでもいいようです。
xdg-user-dirs-update --force
ただし、ディレクトリの中身の移動、不要になったディレクトリの削除は手作業で行う必要があります。
~/.config/user-dirs.dirs を直接書き換えてカスタムディレクトリを使うこともできます。たとえば "$HOME/ダウンロード" を "$HOME/Downloads" に書き換えてここだけ英語にすることもできます。ただし、$HOME/Downloads ディレクトリを作ってから ログアウト、ログイン をしてください。
Perl
use utf8は書くべきなのか? によると、「substr(文字分割)、length(文字の長さ取得)と言うような、UNICODE とマルチバイトで動作が変る関数群などに対して、 どちらの処理方法で処理するかを教えるのがutf8フラグとなります。」ということで utf8 で統一された環境では(そうした関数群を使わないなら)use utf8; プラグマは必要ないそうです。Linux では必要ないということになりそうです。Windows でも Msys2 で Perl を使っていれば use utf8; は必要なかったのかもしれません。
それでは Linux で use utf8; を使う場合、utf-8 以外のファイルを読み書きするにはどうすればいいのか? だいたい次のような感じでよさそうです。open 文でのファイル名の encode の必要はないようです。
#! /usr/bin/perl
use strict;
use warnings;
use utf8;
binmode STDIN, ":encoding(utf8)";
binmode STDOUT, ":encoding(utf8)";
binmode STDERR, ":encoding(utf8)";
use open ':encoding(utf8)';
use Encode qw/encode decode/;
sub d($) { decode('utf8', shift) }
sub e($) { encode('utf8', shift) }
@ARGV = map {d($_)} @ARGV;
open my $R, "<:encoding(EUC-JP)", "入力.txt"
or die "開けません";
while(my $l = <$R>){
print $l;
}
close $R;
open my $W, ">:encoding(EUC-JP)", "出力.txt"
or die "Can't open.";
print $W "出力文字列 ";
print $W $ARGV[0];
close $W;
use utf8; を使わない場合です。読み込んだらすぐに encode、書き込む直前に decode ですかね。
#! /usr/bin/perl
use strict;
use warnings;
open my $R, "<:encoding(EUC-JP)", "入力.txt"
or die "開けません";
while(my $l = <$R>){
$l = Encode::encode('utf8', $l);
print $l;
}
close $R;
open my $W, ">:encoding(EUC-JP)", "出力.txt"
or die "開けません";
print $W Encode::decode('utf8', "出力文字列 ");
print $W Encode::decode('utf8', $ARGV[0]."\n");
close $W;
2024-10-01 の Stable Update で Perl は 5.38 から 5.40 になりました。LWP::Simple と LWP::Protocol::https をインストールしておけば LWP::Simple の get でインターネット上の HTMLファイルを取得できたのですが、できなくなりました。CPANのドキュメントを読んで試してみると Mozilla::CA と Net::SSLeay をインストールすると再び get が機能することがわかりました(Mozilla::CA が本当に必要かはわかりません)。
Windows では Strawberry Perl を使ってたのですが、5.38 では Locale 'Japanese_Japan.932' is unsupported, and may crash the interpreter. のメッセージがでて使えない状態でしたが、5.40 では問題なくなりました。
Raku
# rakudo インストール(zef もインストールされる)
yay -S rakudo-bin
PATH に /usr/share/perl6/site/bin/ を付け加えろとメッセージあり。
raku を実行すると以下のメセージ。
You may want to `zef install Readline`, `zef install Linenoise`, or `zef install Terminal::LineEditor` or use rlwrap for a line editor
zef update
zef upgrade
zef install Readline
Readline が動かなくなったので
zef uninstall Readline
zef install Linenoise
2023年12月ころより yay でアップグレードに失敗していたのですが、パッケージの詳細: rakudo-bin 2023.12_01-1 のコメントのコマンド後の再実行で成功しました。
gpg --keyserver keys.openpgp.org --receive-keys DB2BA39D1ED967B584D65D71C09FF113BB6410D0 59E634736AFDCF9C6DBAC382602D51EACA887C01
Java
Java(ArchWiki) によると、OpenJDK の最新版とLTS版が公式サポートされるらしいです。
sudo pacman -S jdk-openjdk
とコマンドを実行すると /usr/lib/jvm/java-XX-openjdk/ に最新版がインストールされます(XX はバージョン番号)。
さらに usr/lib/jvm/default-runtime と /usr/lib/jvm/default がつくられますが、これらは /usr/lib/jvm/java-XX-openjdk/ へのリンクです。
java コマンドで起動されるのは、/usr/bin/java ですが、これは /usr/lib/jvm/default-runtime/bin/java へのリンクです。
過去の LTS 版をインストールするには次のようにします。(番号は置き換えて下さい)
sudo pacman -S jdk17-openjdk
複数の Java を管理するコマンドが用意されています。
archlinux-java status
でインストールされている Java 環境を確認して、例えば
sudo archlinux-java set java-17-openjdk
のように default 環境を切り替える(リンクのはり直し)ことができます。
OpenJFX のインストールは AUR からになります。jdk17 対応のものは pacman でインストール可能でしたが、今は AUR からになるようです。
sudo pacman -S java17-openjfx
Javaプログラムを実行すると次のようなエラーメッセージがでます。
Error occurred during initialization of boot layer
java.lang.LayerInstantiationException: Package jdk.internal.jrtfs in both module java.base and module jrt.fs
2重にパッケージがあるので、jrt-fs.jar を削除すればいいそうです。
sudo rm /usr/lib/jvm/default/lib/jrt-fs.jar
jdk17 でターミナルに文字化けせずに日本語を表示してくれます。
最新の openJFX ですが、次のコマンドでビルドに失敗しました。
yay -S aur/java-openjfx
原因はわかりません。(メモリーが少ないからかもしれません)面倒なので OpenJDK にあるビルド済の JavaFX を使うことにしました。Linux/x64 の SDK と JMODs です。いっそのこと JDK 自体も OpenJDK の GA版でいいのではないかと思いました。
/usr/local/java というフォルダをつくり、その中に解凍展開したフォルダからバージョン番号を取り除いた jdk, javafx-sdk, javafx-jmods の3つのフォルダを入れておきます。( jdk/release, javafx-sdk/lib/javafx.properties を読むことでもバージョンは確認できます)
~/.bash_profile に環境変数の設定をします。
export JAVA_HOME=/usr/local/java/jdk
export PATH_TO_FX=/usr/local/java/javafx-sdk
export PATH_TO_FX_MODS=/usr/local/java/javafx-jmods
export PATH=$JAVA_HOME/bin:$PATH
のように書いておきます。確認してみます。
. .bash_profile
java -version
openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-29)
OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)
手作業でアップデートしなければなりません。GA版には過去バージョンがありません(と思い込んでいたのですが、Archive に全部ありました。使用は推奨されてませんが)。
Apache Ant は入れておいたほうがよさそうです。ダウンロードして解凍展開して、/usr/local/java/apache-ant としました。~/.bash_profile に付け加えて、PATH を修正します。Apache Ivy もダウンロードしました。使い方は Apache Ivyの紹介と基本的な使い方 が詳しいです。
export ANT_HOME=/usr/local/java/apache-ant
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
サンプル
コマンド行引数ファイルを作る方法でサンプルのビルドと実行をしてみます。JavaFX の Getting Started with JavaFX のあたりにあったソースコードがもとになっているので確かなものだと思います。hellofx というプロジェクトフォルダを作り、src フォルダにソースコードを入れます。
hellofx/src/module-info.java
module hellofx {
requires javafx.controls;
exports hellofx;
}
hellofx/src/hellofx/HelloFX.java
package hellofx;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
@Override
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
System.out.println("こんにちは世界!");
launch();
}
}
hellofx/arg これはコンパイル用のコマンド行引数ファイルです。
-Xlint:unchecked
-Xdiags:verbose
-d dst/hellofx
--module-path /usr/local/java/javafx-sdk/lib
src/module-info.java
src/hellofx/HelloFX.java
hellofx/opt これは実行用のコマンド行引数ファイルです。
--module-path /usr/local/java/javafx-sdk/lib:dst/hellofx
-m hellofx/hellofx.HelloFX
hellofx に行って次のコマンド。
javac @arg
java @opt
モジュラJARファイルの作り方。最後のドットを忘れないでください。
jar -c -v -f hellofx.jar -e hellofx.HelloFX -C dst/hellofx .
-c または --create アーカイブを作成します。
-v または --verbose 冗長出力を標準出力に出力します。
-f= FILE または --file= FILE アーカイブ・ファイル名を指定します。
-e= CLASSNAME または --main-class= CLASSNAME これは main class の指定です(これはなくてもかまいません)。
-C DIR 指定されたディレクトリから、この次に指定されたファイルを格納します。
hellofx.jar を module-path に入れることで起動できます。
java --module-path $PATH_TO_FX/lib:hellofx.jar -m hellofx/hellofx.HelloFX
hellofx.jar に main class が指定してあれば省略できます。
java --module-path $PATH_TO_FX/lib:hellofx.jar -m hellofx
カスタム・ランタイム・イメージの作り方。javafx は jmods を使うことに注意してください。hellofx.jar を使うこともできます。--launcher オプションはなくてもいいようです。
jlink --module-path $PATH_TO_FX_MODS:dst/hellofx --add-modules hellofx --output hellofx --launcher hellofx=hellofx/hellofx.HelloFX
起動方法。
hellofx/bin/java -m hellofx/hellofx.HelloFX
launcher を指定してあればそこから起動できます。
hellofx/bin/hellofx
自動モジュール
モジュール定義ファイル(module-info.java)を書くのは面倒です。2.1 Javaモジュールシステム(モジュール定義ファイル、モジュールパス、ルートモジュール、自動モジュール、無名モジュールなど)~Java Advanced編 によるとモジュール定義ファイルがない場合は、モジュールパス上に配置されれば自動モジュール(automatic module)とされ、クラスパス上に配置されれば無名モジュール(unnamed module)として扱われます。どちらの場合でも「包含されるすべてのパッケージがexportsされたものと見なされ、外部公開されます。またモジュールグラフ上のすべてのモジュールを、requiresしたものと見なされます。」クラスパスも使えますがこれは後方互換のための機能なので「今後のJavaによるアプリケーション開発では基本的にはモジュールシステムを適用し、すべてのライブラリをモジュールパスから読み込むことをお勧めします。」
モジュールグラフにモジュールを追加するオプションが --add-modules です。ALL-MODULE-PATH で動くならこれが一番簡単です。
hellofx/arg2 コンパイル用のコマンド行引数ファイルです。
-Xlint:unchecked
-Xdiags:verbose
-d dst/hellofx
--module-path /usr/local/java/javafx-sdk/lib
--add-modules ALL-MODULE-PATH
src/hellofx/HelloFX.java
hellofx/opt2 自動モジュールとして起動するコマンド行引数ファイルです。
--module-path /usr/local/java/javafx-sdk/lib:hellofx.jar
--add-modules ALL-MODULE-PATH
-m hellofx/hellofx.HelloFX
hellofx/opt3 無名モジュールとして起動するコマンド行引数ファイルです。
--module-path /usr/local/java/javafx-sdk/lib
--add-modules ALL-MODULE-PATH
-cp dst/hellofx
hellofx.HelloFX
コンパイルして jar ファイルをつくります。(自動モジュールは jarファイルである必要があるらしい)
javac @arg2
jar -c -v -f hellofx.jar -e hellofx.HelloFX -C dst/hellofx .
java @opt2
opt3 から 無名モジュールとして動くことも確認。
java @opt3
jdeps に module-info.java を作ってもらいます。
jdeps --generate-module-info . --module-path $PATH_TO_FX/lib hellofx.jar
module hellofx {
requires javafx.controls;
requires transitive javafx.graphics;
exports hellofx;
}
requires transitive javafx.graphics; の1行が増えており、実際は使われないモジールを requires する場合があることがわかります。
Java8 のプログラム(FXML を使ったものでした)で、--add-modules ALL-MODULE-PATH をつけると動くのに、jdeps --generate-module-info の作った module-info.java だと動かないものがありました。内部API という隠しAPI のせいでした。
requires jdk.unsupported;
と module-info.java に付け足すと動くようになりました。内部API は特別な扱いになっているようです。次のコマンドでみることができます。
jdeps --module-path $PATH_TO_FX/lib xxx.jar
jdeps --jdk-internals --module-path $PATH_TO_FX/lib xxx.jar
opens など他のモジュール・ディレクティブ(というらしいです)を付け加えなければならない場合もあるようです。内部API を使わないようにしなければ、再コンパイルする意義が小さくなるようです。
無名パッケージは、jdeps --generate-module-info すると次のようなメッセージが出て、module-info.java はつくれません。
エラー: hellofx.jarには、モジュールで許可されない名前のないパッケージが含まれます
- Java Documentation
- JavaFX
- Introduction to FXML
- A Guide to Java 9 Modularity
- 事例から学ぶ、Java SE 11移行 その2 -モジュールアプリケーションの場合-
- .jarファイル内のファイルにアクセスする方法
- Java 8からJava 12へのアップグレード
- Oracle JDK 移行ガイド
HiDPI
Windows で JavaFX の表示が大きくなることがあります。HiDPI のディスプレイで文字などが小さくなるのでディスプレイの設定で 125% とかにしていると起きるようです。これはキャンセルすることができるそうです。java コマンドに -Dprism.allowhidpi=false というオプションを付けるか、またはソースコードに次の文を書いておきます。(これらは Windows で実行することにそなえた対策です)
System.setProperty("prism.allowhidpi", "false");
Font Setup
JavaFX 21.0.1 ですが Labelなどで半角数字が表示されません。Windows版は問題ないのですが。原因がわからないので JavaFX - Gluon から 17.0.10 をダウンロードして使うことにしました。JavaFX 21では、デフォルトのフォント(System, Regular)では半角数字が表示されないようです(自分だけかもしれませんが)。実在するフォント名を指定すれば半角数字も表示されるようです。
Font Setup(OpenJDKWiki) を見つけました(ただしこれは古い情報です)。logical font として、System, Serif, SansSerif, Monospaced があり、スタイルは Regular, Bold, Italic, Bold Italic があります(System は SansSerif と同じです)。JavaFX はフォントに関しては fontconfig に問い合わせるそうです。書いてあるとおりにやってみると
$ fc-match sans.regular
DroidSansJapanese.ttf: "Droid Sans" "Regular"
なんだかわからないフォントになっていて、これが原因のようです。fontconfigの設定 を参考に設定してみました。絵文字の設定に使った /etc/fonts/local.conf の </fontconfig> の前に
<alias>
<family>serif</family>
<prefer>
<family>IPAexMincho</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>IPAexGothic</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>IPAGothic</family>
</prefer>
</alias>
を書き加えました。試してみます。
$ fc-match sans.regular
ipaexg.ttf: "IPAexゴシック" "Regular"
となりました。JavaFX21 でも半角数字が表示されるようになりました。fontconfig.properties(フォント構成ファイル)をつくるべきかもしれませんが難しそうです。誰かフォントに詳しい人が作って公開してくれるのを待ったほうがよさそうです(他力本願)。
Java は論理フォント名として Serif, SansSerif, Monospaced, Dialog, DialogInput の5つをサポートしなくてはならないそうです。スタイル名は標準で plain, bold, italic, bolditalic の4つです。
- Linuxのフォント設定
- 美しいフリーの日本語フォントを使う
- Linux fontconfigの設定について
- Archlinuxで、Notoフォント、Noto CJKフォントを使う
- フォント設定/サンプル(ArchWiki)
- Java 実行環境のフォント(ArchWiki)
- X Logical Font Description (ArchWiki)
- 5 Font Configuration Files
- 5 フォント構成ファイル
JavaFX 24
Release Notes for JavaFX 24 によると JavaFX24 は jdk22 かそれ以上でないと動かないそうです。それに次のようなメッセージが出るのでオプションをつけます。現時点ではオプションをつけなくてもメッセージが出るだけで動きます。
WARNING: Restricted methods will be blocked in a future release unless native access is enabled
# というようなメッセージが出るので次のようにオプションをつけます。
java --enable-native-access=javafx.graphics,javafx.media,javafx.web
次のようなメセージが出るのでさらにオプションが必要です。こっちは修正されるまで(24.0.1 ですでに修正されたかと思ったのですが…)の一時的な対応です。
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
...
WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
# というようなメッセージが出るので次のようにオプションをつけます。
java --sun-misc-unsafe-memory-access=allow
Java 8
モジュールシステムに対応していないため、モジュールにする必要のないのが Java 8 です。公式サポートの延長がいつまでになるかわかりません。JavaFX を同梱している Amazon Corretto をダウンロードしてみました。Java 8 でいいのなら NetBeans も使いやすいのですが…。
/usr/local/java/jdk8/ に入れておきました。
Apache NetBeans
Apache NetBeans は NekoBean(ねこび〜ん) を擁する統合開発環境で、特に Java 開発環境として有名です。ほとんどが Java で書かれており、zip版をダウンロードすれば Windows と Linux の両方でバイナリを共有できます。
NetBeans 自体を動かすのに JDK が必要ですが、NetBeans19 からは JDK11 以上となりました(もっと新しいバージョンでは JDK17 以上が要求されます)。これを指定するには環境変数 $JAVA_HOME か、etc/netbeans.conf の netbeans_jdkhome= に指定するか(コメントを参照してください)、起動時にオプション --jdkhome を使うなどの方法があります(この順で優先順位が高くなるようです)。起動後にメニューの Help → about で確認できます。
Ant のモジュールプロジェクトをつくるには、メニューの File → New Project... から Java widh Ant → Java Modular Project → Next> と進んで Project Name などを入力して Finish します。src に モジュール名/classes フォルダを作り、その中にソースを入れます。
src/モジュール名/classes/module-info.java
src/モジュール名/classes/パッケージ名/xxxx.java
Main Class は、メニューの File → Project Properties で RUN のカテゴリーで指定します(モジュール名は必要なく、パッケージ名.クラス名 です)。
JavaFX を使うには、メニューの Tools → Libraries で Ant Library Manager を開いて、Library Name を JavaFX などとして、Add JAR/Folder... を押して、javafx-sdk/lib を開いて中のすべての jar ファイルを選択、Add JAR/Folder ボタンを押します。OK ボタンを押します。
Project Properties で Categories から Libraries をクリックして、Modulepath の + ボタンをクリックして Add Library... を選択、JavaFX を選択して、OK ボタンで閉じます。
十進BASIC
十進BASIC は国際規格のJIS Full BASICに準拠し、二進化十進数による多倍長計算ができるBASIC言語です。Linux版 を試してみたのですが、残念ながらgtk2版とQt5版の両方の日本語入力に問題があります。他のエディッタに入力した文字をコピーすることはできます(メニューの表示(W) → 漢字入力枠(K) から入力できます)。メニューのアイコンが小さすぎます。Qt5版には次のパッケージが必要でした。(Wayland にしたら gtk2版 は起動しなくなりました。)
sudo pacman -S qt5pas
アイコンは BASIC812Ja/source/basic.ico にあります。ICOをPNGにオンラインかつ無料で変換する で変換し(basic.zip)ダウンロードしました。中から 2.png を取り出して basic.png などに名前を変えて ~/.local/share/icons に入れます。(このアイコンはダークモードにしてるせいか輝いて見えます。特にBの文字が。メニューの中で一番綺麗なアイコンです)
#サンプルプログラムから mime type を調べます
xdg-mime query filetype ./COMPLEX/ABS.BAS
text/x-basic
~/.local/share/applications/basic.desktop をつくります。Exec の PATH は置き換えてください。
[Desktop Entry]
Type=Application
Name=BASIC
GenericName=十進BASIC
Exec=/PATH/BASICJa/basic -NR %F
Terminal=false
Icon=basic
Categories=Development;
MimeType=text/x-basic;
Qt6版がありました。qt6pas が必要らしいです。
KaTeX
KaTeX はウェブブラウザで数学記法を表示するクロスブラウザJavaScriptライブラリ、だそうです。
数式の書き方は Supported Functions と Support Table にまとめられています。
HTML の <head> 内に書いておけば、インターネットに接続していれば数式を表示できます(2024年12月)。
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.18/dist/katex.min.css" integrity="sha384-veTAhWILPOotXm+kbR5uY7dRamYLJf58I7P+hJhjeuc7hsMAkJHTsPahAl0hBST0" crossorigin="anonymous">
<!-- The loading of KaTeX is deferred to speed up page rendering -->
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.18/dist/katex.min.js" integrity="sha384-v6mkHYHfY/4BWq54f7lQAdtIsoZZIByznQ3ZqN38OL4KCsrxo31SLlPiak7cj/Mg" crossorigin="anonymous"></script>
<!-- To automatically render math in text elements, include the auto-render extension: -->
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.18/dist/contrib/auto-render.min.js" integrity="sha384-hCXGrW6PitJEwbkoStFjeJxv+fSOOQKOPbJxSfM6G5sWZjAyWhXiTIIAmQqnlLlh" crossorigin="anonymous"
onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
// customised options
// • auto-render specific keys, e.g.:
delimiters: [
{left: '$$', right: '$$', display: true},
{left: '$', right: '$', display: false},
{left: '\\(', right: '\\)', display: false},
{left: '\\[', right: '\\]', display: true}
],
// • rendering keys, e.g.:
throwOnError : false
});
});
</script>
オフラインで表示できるようにするにはまず npm を(なければ)インストールします(Node.js(ArchWiki))。それから npm で katex をインストールします。
sudo pacman -S npm
sudo npm install -g katex
# 次のコマンドで npm を update しろといわれました
sudo npm install -g npm@11.0.0
# すべてのローカルにインストールしたパッケージをアップデートするには
npm update
# すべてのグローバルにインストールしたパッケージをアップデートするには
sudo npm update -g
/usr/lib/node_modules/katex にインストールされます。HTML の <head> 内の該当部分を次のように書き換えるとオフラインで数式を表示できます。
<link rel="stylesheet" href="/usr/lib/node_modules/katex/dist/katex.min.css">
<!-- The loading of KaTeX is deferred to speed up page rendering -->
<script defer src="/usr/lib/node_modules/katex/dist/katex.min.js"></script>
<!-- To automatically render math in text elements, include the auto-render extension: -->
<script defer src="/usr/lib/node_modules/katex/dist/contrib/auto-render.min.js"
onload="renderMathInElement(document.body);"></script>
Lua
Text Editor
Visual Studio Code
Snap版は AppArmor を有効にするのが面倒です。Flatpak版はメニューが白くなってたり(2024年8月の状態で)、日本語がインラインで入力出来なかったりします(バージョンが上がればよくなりそうですが)。
Flatpak版でインラインで日本語入力できるようにするには /var/lib/flatpak/app/com.visualstudio.code/current/active/export/share/applications/com.visualstudio.code.desktop を編集します。このファイルにたどり着くにはアプリケーションメニューから Visual Studio Code を右クリック → アプリケーションを編集… を選択 → リンク先: 右端の > を左クリックします。それからエディッタのKateで開いて、Exec=で始まる行を探します。
Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=code --file-forwarding com.visualstudio.code --reuse-window @@ %F @@
次のように Exec=の直後にenv GTK_IM_MODULE=fcitx を挿入します。Exec=は2つあるので両方を同様に編集します。
Exec=env GTK_IM_MODULE=fcitx /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=code --file-forwarding com.visualstudio.code --reuse-window @@ %F @@
保存します。(パスワードを尋ねられます)別の方法としては、com.visualstudio.code.desktop を ~/.local/share/applications/ にコピーしてから、アプリケーションメニューの Visual Studio Code を右クリック → アプリケーションを編集… を選択 → アプリケーション(A) タブを選択 → 環境変数: に GTK_IM_MODULE=fcitx と書き込む → OKボタンをクリック。
extra にあって pacman でインストールできるのは code-oss です。
sudo pacman -S code
パッケージ (3) electron28-28.3.3-1 ripgrep-14.1.0-1 code-1.89.1-1
合計ダウンロード容量: 82.65 MiB
合計インストール容量: 320.46 MiB
Visual Studio Code よりダウンロードして手作業でインストールするのが一番よさそうです(2024年6月上旬の状態では)。アイコンは VSCode-linux-x64/resources/app/resources/linux/code.png にあります(または Icons and names usage guidelines からダウンロードできます)。desktop ファイルは、vscode/resources/linux/code.desktop にあるものをコピーして修正すればなんとかなりそうです。
と思ったのですが「なるべくオープンソースを使うべき」という方針で pacman でインストールした code-oss を使うことにしました。
拡張機能については Visual Studio Code(ArchWiki) によると code-oss は Visual Studio Marketplace を直接使えず、 Open VSX registry を使わなくてはならないのですが、利用規約に違反しない方法が用意されています。
yay -S code-marketplace
としてから code-oss を起動して普通に Zenkaku と Trailing Spaces をインストールできました。
初期状態では、ASCII文字と紛らわしい文字(Ambiguous Characters)と全角空白(Invisible Characters)は四角い枠で強調表示されますが、この設定は変更できます。VSCodeで、全角スペースをハイライト表示する方法 と VSCodeで全角の空白・ASCIIと混同される文字のハイライトを、非表示にする方法 によると 設定(Ctrl + ,)で次のことをします。
# 全角空白だけ強調表示するには次の2つ
Editor > Unicode Highlight: Ambiguous Characters のチェックを外す。全角空白のみハイライト表示
Editor > Unicode Highlight: Include Comments の値を true に。コメント内でも全角空白を表示
# 全角空白も含め強調表示しない。次の2つ
Editor > Unicode Highlight: Ambiguous Characters のチェックを外す。全角の!や [ ]などのハイライトを、非表示にする
Editor > Unicode Highlight: Invisible Characters のチェックを外す。全角空白のハイライトを非表示にする
拡張機能の Zenkaku で全角空白を可視化(または非可視化)するには F1 または Ctrl+Shift+p で。
> Enable Zenkaku
> Disable Zenkaku
VSCodeの偽拡張機能を作ったらダウンロードされまくり&悪意あるコードを簡単に仕込めるVSCode拡張機能システムの欠陥も明らかになったという報告 - GIGAZINE というのもありますから sandbox を使ったほうがよさそうです。
bubblejail create --profile code_oss code-oss
Updating desktop MIME database
Import tips: Move .vscode-oss folder from your home directory in to instance
home directory.
~/.local/share/applications/code-oss.desktop をエディッターで開いて
MimeType=application/x-code-oss-workspace;
を次のように書き換えます。
MimeType=text/plain;inode/directory;application/x-code-workspace;
bubblejail-config で code-oss を選択します。チェックマークを付けたのは次の箇所です。Direct Rendering をチェックしないとウインドウをリサイズしたとき再描画がうまくいきません。
Common Settings
Default arguments /usr/bin/code-oss --wait
X11 windowing system
Network access
Home Share
.vscode-oss
.config/Code - OSS
.pki
.cache
Direct Rendering
Root share
Read/Write paths
/run/media
Fcitx/Fcitx5 input method
Disable host loopback access
固定スクロール(Sticky Scroll)を解除する方法、VSCodeで関数に沿って固定スクロールを解除する方法 によると設定(Ctrl + ,)で(似た項目が複数あるので注意)
Editor > Sticky Scroll: Enabled のチェックを外す。
Java の機能拡張をインストールしてみました。Language Support for Java(TM) by Red Hat です。java.jdt.ls.java.home を設定したほうがいいらしいです。Ctrl+, で設定を開いて java.jdt.ls.java.home を検索、Edit in settengs.json をクリックして,
"java.jdt.ls.java.home": "/usr/local/java/jdk",
のように jdk へのパスを書き込みます。【VSCode】settings.jsonについて理解する を参考にするとユーザ設定は ~/config/Code - OSS/User/settings.json にあります。機能拡張は ~/.vscode-oss の中にあります。ただし、他のエディターで直接 settings.json を編集してから code-oss を起動しても変更が反映されないことがあるようです。
どうやら機能拡張の Extension Pack for Java をインストールすればいっしょに Language Support for Java(TM) by Red Hat もインストールされるということでした。JavaFX を使ったプログラムではうまくいきません。そんなパケージにはアクセスできないと波線を付けられてしまいます。それで機能拡張の Project Manager for JavaFX をインストールしてみました。波線は少なくなりましたが、module-info.java 内の JavaFX パケージ名の下に波線がついたままです。JavaFX 同梱の Liberica JDK(Full JDK) を試してみました。すると、JavaFX パケージ名下の波線は消えました。
Oracle による NetBeans 由来の拡張機能 Java Platform Extension for Visual Studio Code も試してみました。JavaFX パケージ名下の波線を消すには、Liberica JDK(Full JDK) を使うのがよさそうです。
拡張機能をインストールして code-oss を Java IDE として使うのはあまりよくないようです。JavaFX や外部のモジュールを使うと設定が面倒です。それにソースコードのチェックに時間がかかってます。ソース・ファイル・モードで Java を使うのにはいいかもしれません。
ターミナルの設定がよくわからないのですが VSCodeのターミナル/プロファイルの設定の詳細 と How do I modify PATH in the VSCode integrated terminal without overwriting VSCode's own additions to the PATH? を参考にすると、~/config/Code - OSS/User/settings.json の一番外側の { } の内側に以下のように書き足します。jdk のパスやフォントサイズなどは適当に書き換えてください。
"terminal.integrated.profiles.linux": {
"bash": {
"path": "/usr/bin/bash",
"args": [
],
"overrideName": true,
"env": {
"JAVA_HOME": "/usr/local/java/jdk",
"PATH": "${workspaceFolder}:/usr/local/java/jdk/bin:${env:PATH}"
},
"icon": "terminal",
"color": "terminal.ansiRed"
}
},
"redhat.telemetry.enabled": true,
"terminal.integrated.fontSize": 16,
wayland セッションで、xwayland ではなく wayland で起動するには、~/config/code-flags.conf をつくって次のように書き込んでおきます。
--enable-features=UseOzonePlatform,WaylandWindowDecorations
--ozone-platform-hint=auto
--enable-wayland-ime
--enable-features の行はななくてもいいのかもしれません。下線がなかったりしますが、日本語入力できます。bubblujail を使う場合は、設定で Wayland のチェックを入れて、Home Share の .config/Code - OSS を .config に変更します。
テキストをペーストする Ctrl + v が効かなくなってました(2025年2月上旬)。Cannot paste into Code - OSS 修正されるまで Ctrl + shift + v を使えばいいようです。この問題は 2025-03-18 のアップデートで修正されました。
~/.config/Code - OSS が 2.9GiB にもなっていました。必要ないファイルがたくさんあるようです。そこで削除するスクリプトをつくりました。2.5GiB 削除してくれました。もしかしたら削除しすぎの可能性もあります。
code-cleanup.sh
#!/usr/bin/bash
cd ~/.config/'Code - OSS'
rm -v -r Cache
rm -v -r CachedData
rm -v -r CachedExtensionVSIXs/.trash
rm -v CachedExtensionVSIXs/.*
rm -v Crashpad/pending/*
rm -v -r logs
rm -v -r User/History
rm -v -r User/workspaceStorage
Light Table
即時実行、即時フィードバックができるというエディッタです。開発はすでに止まっています。Light Table からダウンロードしたのですが libgconf-2.so.4 がないといって動きません。調べてみると
pacman -F libgconf-2.so.4
community/ledger-live-bin 2.60.0-1
opt/ledger-live-desktop/usr/lib/libgconf-2.so.4
が見つかったのでダウンロードしてきましたが zsh: segmentation fault (core dumped) と表示され動きません。諦めたほうがよさそうです。
テキストエディター
Text Editor (gnome-text-editor) は GNOME 標準のテキストエディターです。軽量でシンプルなエディターです。インストール直後の状態ではフォントが Monospace 11 になってるので fontconfig の設定によってはテキストがうまく表示されないかもしれません。
sudo pacman -S gnome-text-editor
Wayland セッションではマウスカーソルが巨大化します(ディスプレイの設定でスケールを125%にしてたりすると起きる現象のようです)。TPatch for GTK 4.16 for incorrect cursor size on KDE によると、これは GTK 4.16 の問題で 4.18 では修正されています。
Xwayland で動かしたい場合は ~/.bash_profile に export GDK_BACKEND=x11 と書いておきます。
vi
Manjaro では標準的にインストールされているようです。後にSun Microsystems 上級副社長となる Bill Joy がプログラムしたものに近いと思われます。とてもシンプルでストイックです。インサートモードでカーソル移動の矢印キーが使えません。ノーマルモードで日本語文で w コマンドで移動のしかたが vim とは違ってます。vi の基本コマンドの一覧、 viの基本操作 が参考になります。ビジュアルモードが使えないので、3文字をコピーしたい場合は y3l とすればいいということです。
H 画面の先頭行に移動 M 画面の中央行に移動 L 画面の最後行に移動
Ctrl-b 1画面前のページを表示 Ctrl-u 半画面前にスクロール Ctrl-e 1行前にスクロール
Ctrl-f 1画面先のページを表示 Ctrl-d 半画面先にスクロール Ctrl-y 1行先にスクロール
2026-02-01 の Stable Update で vi は ex-vi-compat に置き換えられ vim を使うようになってしまいました。[SOLVED] why vi is now suggested to be replaced with ex-vi-compat ? 置き換えを許可しなければよかったと思いつつ ex-vi-compat をアンインストールしました。
vim, gvim
GVim の AppImage をターミナルで vim として使うにはリンクをつくればいいそうです。
ln -s GVim-*.AppImage vim.appimage
vim と gvim の設定ファイルは ~/.config/vim/ に vimrc と gvimrc として入れておけばいいそうです。[vim] viminfo の場所は vimrc の中で指定できる (set viminfo+=n~/.vim/viminfo) を参考にして vimrc に set viminfo+=n~/.config/vim/viminfo と書いておきます。
gvim はシステムのクリップボードと連携可能です。vimrc に set clipboard=unnamedplus,unnamed と書いておけばいいらしいです(これがベストなのか自信ありませんが)。
vim内のヤンクをクリップボードと連携させるには を参考にすると、このAppImage版vim はシステムのクリップボードと連携はできません。(再ビルドの必要があります)
vim, neovim でインサートモードからノーマルモードに戻ったときにすぐにコマンドを打てるように IME を自動的にオフにします。Fcitx5(ArchWiki) vim で自動的に入力メソッドを切り替える
vim は ~/.vimrc に、neovim は ~/.config/nvim/init.vim に次のコードを書き加えます。ArchWiki にあるものですが、コメントに改行を入れています。(そうしないと機能しませんでした)
let fcitx5state=system("fcitx5-remote")
autocmd InsertLeave * :silent let fcitx5state=system("fcitx5-remote")[0] | silent !fcitx5-remote -c
" Disable the input method when exiting insert mode and save the state
autocmd InsertEnter * :silent if fcitx5state == 2 | call system("fcitx5-remote -o") | endif
" 2 means that the input method was opened in the previous state, and the input method is started
" when entering the insert mode
vim9script が使えるなら下のコードのほうがいいらしいです。
# Only taking affect after using vim9script grammar or has `vim9script` keyword.
var fcitx5state = system("fcitx5-remote")
autocmd InsertLeave * :silent fcitx5state = system("fcitx5-remote")[0] | silent !fcitx5-remote -c
autocmd InsertEnter * :silent if fcitx5state == '2' | call system("fcitx5-remote -o") | endif
インサートモードを抜けると mozc がオフになります。
vi(vim)で完全にカーソルキーを無効化させたい によると、vimrc や init.vim に書いておけば矢印キーを無効にできます。
~/.config/vim/vimrc
noremap <up> <nop>
noremap <left> <nop>
noremap <right> <nop>
noremap <down> <nop>
noremap! <up> <nop>
noremap! <left> <nop>
noremap! <right> <nop>
noremap! <down> <nop>
日本語の文書だと w, b などのコマンドでのカーソル移動がわずらわしいので、Alt+l で高速に l を8連打するようにしてみました。
~/.config/vim/vimrc
map <A-h> hhhhhhhh
map <A-j> jjjj
map <A-k> kkkk
map <A-l> llllllll
ミニマリスト向けのプラグインマネージャー junegunn / vim-plug を入ました。ターミナルで次のコマンドです。昔は ~/.vim に入れていたようです。
curl -fLo ~/.config/vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
overcache / NeoSolarized と mattn / emmet-vim をインストールしました。~/.config/vim/vimrc に次のコードを書き込んでおきます。set termguicolors を忘れずに。
call plug#begin('~/.config/vim/plugged')
Plug 'overcache/NeoSolarized'
Plug 'mattn/emmet-vim'
call plug#end()
syntax enable
set termguicolors
#set background=light
set background=dark
colorscheme NeoSolarized
g:user_emmet_leader_key = '<C-E>'
vim を起動してコマンド :PlugInstall または :PlugUpdate を実行します。emmet は コマンドの直後に Ctrl + e のあと , をタイプしてください。
~/.config/vim/gvimrc に次のように書いておくと、GVim で Solarized dark が使えました。
~/.config/vim/gvimrc
vim9script
set guifont=Migu\ 1M\ 14
set columns=120 # 幅
set lines=30 # 高さ
syntax enable
set background=dark
#set background=light
colorscheme NeoSolarized
set guioptions-=T #ツールバーを非表示
set guioptions-=m #メニューを非表示
neovim
nvim でのシステムのクリップボードとの連携については、X11 では xclip(xcel でもいいのかも) を、Wayland では wl-clipboard を pacman でインストールします。両方インストールしても衝突はしないようです。~/.config/nvim/init.vim に set clipboard=unnamedplus,unnamed と書いておきます。
init.lua に Lua言語で書いたほうがいいらしいのです。Getting started using Lua in Neovim が参考になります。プラグインマネージャーは folke / lazy.nvim を使えばいいのですが… Getting Started の構成的セットアップをやってみました。まず ~/.config/nvim/init.lua と ~/.config/nvim/lua/config/lazy.lua をつくります。
~/.config/nvim/init.lua
require("config.lazy")
~/.config/nvim/lua/config/lazy.lua
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
-- Make sure to setup `mapleader` and `maplocalleader` before
-- loading lazy.nvim so that mappings are correct.
-- This is also a good place to setup other settings (vim.opt)
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
-- Setup lazy.nvim
require("lazy").setup({
spec = {
-- import your plugins
{ import = "plugins" },
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "habamax" } },
-- automatically check for plugin updates
checker = { enabled = true },
})
プラグインの情報をいれるフォルダをつくります。
mkdir -p ~/.config/nvim/lua/plugins/
この状態で nvim を起動すると No specs found for module "plugins" といわれます。Tsuzat / NeoSolarized.nvim をインストールしてみました。~/.config/nvim/lua/plugins/NeoSolarized.lua をつくります。
~/.config/nvim/lua/plugins/NeoSolarized.lua
return {
{
"Tsuzat/NeoSolarized.nvim",
lazy = false, -- make sure we load this during startup if it is your main colorscheme
priority = 1000, -- make sure to load this before all the other start plugins
config = function()
vim.cmd [[ colorscheme NeoSolarized ]]
end
}
}
nvim を起動するとダウンロードして NeoSolarized が使えるようになります。ですが lightモードにするには ~/.local/share/nvim/lazy/NeoSolarized.nvim/lua/NeoSolarized/config.lua を書き換えろということなのかよくわかりません。
olrtg / nvim-emmet も使えるようにしようと思ったのですが… それには olrtg / emmet-language-server を使えるようにしなければなりません。それには neovim / nvim-lspconfig を使う方法があるのですが、Neovim0.11 では nvim-lspconfig を使わなくても lsp の設定が楽にできるようになったというのです。まず emmet-language-server をダウンロードします。npm は pacman で パッケージ npm をインストールすれば使えます。
sudo npm i -g @olrtg/emmet-language-server
~/.config/nvim/lsp というフォルダをつくって、emmet-language-server.lua を入れます。
~/.config/nvim/lsp/emmet-language-server.lua
return {
cmd = { "emmet-language-server", "--stdio" },
filetypes = { "css", "eruby", "html", "javascript", "javascriptreact", "less", "sass", "scss", "pug", "typescriptreact" },
settings = {
---@type table<string, string>
includeLanguages = {},
--- @type string[]
excludeLanguages = {},
--- @type string[]
extensionsPath = {},
--- @type table<string, any> [Emmet Docs](https://docs.emmet.io/customization/preferences/)
preferences = {},
--- @type boolean Defaults to `true`
showAbbreviationSuggestions = true,
--- @type "always" | "never" Defaults to `"always"`
showExpandedAbbreviation = "always",
--- @type boolean Defaults to `false`
showSuggestionsAsSnippets = false,
--- @type table<string, any> [Emmet Docs](https://docs.emmet.io/customization/syntax-profiles/)
syntaxProfiles = {},
--- @type table<string, string> [Emmet Docs](https://docs.emmet.io/customization/snippets/#variables)
variables = {},
}
}
init.lua に次の1行を加えます。
~/.config/nvim/init.lua
vim.lsp.enable('emmet-language-server')
nvim-emmet.lua に設定を書くのですが…
~/.config/nvim/lua/plugins/nvim-emmet.lua
return {
{
"olrtg/nvim-emmet",
config = function()
vim.keymap.set({ "n", "v" }, '<leader>xe', require('nvim-emmet').wrap_with_abbreviation)
end,
}
}
[Vim問題] Leaderキーってなに? によると <leader> は設定できて、スペースにする人が多いそうです。init.lua に vim.cmd [[let mapleader = "\<Space>"]] を require("config.lazy") の前に書いておきます。{ "n", "v" } はノーマルモードとビジュアルモードという意味のようです。(キーマップ、短縮入力、ユーザー定義コマンドについて。)
nvim で html ファイルを開くと emmet が使えるようにはなるのですが… ノーマルモードで スペースのあと xe で、Abbreviation: ときかれるのでそこに emmet のコマンドを入力できます。vim とはだいぶ違うのですが…
Neovim の LSP を設定するための基本知識 と
Neovim0.11用のLSP設定 が参考になります。nvim で HTML ファイルを開いて :checkhealth lsp でlspの健康状態が確認ができます。
~/.config/nvim/init.vim があると E5422: 設定が競合しています: とメッセージがでます。
vim.cmd [[ ]] の中に書き込んでしまえばとりあえず動きます。(vim9script はだめらしいです)
~/.config/nvim/init.lua
require("config.lazy")
vim.cmd [[
let fcitx5state=system("fcitx5-remote")
autocmd InsertLeave * :silent let fcitx5state=system("fcitx5-remote")[0] | silent !fcitx5-remote -c
" Disable the input method when exiting insert mode and save the state
autocmd InsertEnter * :silent if fcitx5state == 2 | call system("fcitx5-remote -o") | endif
" 2 means that the input method was opened in the previous state, and the input method is started
" when entering the insert mode
set clipboard=unnamedplus,unnamed
]]
:Lazy / :Lazy home lazy.nvimのUIが起ち上がります。
:Lazy install インストールされていないプラグインをインストールします。
:Lazy update プラグインのアップデートを行います。
:Lazy check プラグインの更新情報だけを取得し、アップデートは行いません。
:Lazy clean 使用していないプラグインを削除します。
環境変数 XDG_CONFIG_HOME(設定されてなければ ~/.config が使われます)内にフォルダをつくり環境変数 NVIM_APPNAME に設定すればそのフォルダ内の設定を使って起動するそうです。
neovim-qt
nvim の GUIクライアントです。日本語入力に問題があります。
ginit.vim は フォントの設定で GuiFont! Migu 1M:h12 のように ! が必要です(日本語の等幅フォントは半角と全角があるため)。ですが、init.lua を使うと ginit.vim は読み込まれないようです。Saying Goodbye to Vimscript が参考になりそうですが… よくわかりません。
「メインの設定言語として lua を使用することが強く推奨されます。」しかし「現時点では、init.lua と一般的な init.vim を比較した場合、あまり大きなメリットはありません」ので neovim-qt は init.vim による設定に戻すことにしました。
init.vim のファイル名を Xinit.vim にかえておきます。neovim-qt アプリケーションを編集… で コマンドライン引数 を -- %F -u '~/.config/nvim/Xinit.vim' にして保存します。NeoSolarized も emmet もvim用が動きました。
~/.config/nvim/Xinit.vim
call plug#begin('~/.config/nvim/plugged')
Plug 'overcache/NeoSolarized'
Plug 'mattn/emmet-vim'
call plug#end()
syntax enable
set termguicolors
#set background=light
set background=dark
colorscheme NeoSolarized
g:user_emmet_leader_key = '<C-E>'
vim-plug をインストールします。
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
nvim-qt を起動してコマンド :PlugInstall または :PlugUpdate を実行します。
goneovim
nvim の GUIクライアントです。aur/goneovim-bin があるので yay でインストールできます。
設定は ~/.config/goneovim/settings.toml をつくって Usage akiyosi / goneovim からコピーしてくるらしいです。不必要な # を削除するなりしてください。スクロールバーでスクロールさせることはできますが、スクロールバーは動きません。依存ファイルが大きくてyayがビルドするとやたら時間がかかるのでアンインストールしました。
neovide
nvim の GUIクライアントです。extra/neovide があるので pacman でインストールできます。neovide がホームページです。日本語の入力がへんですが、カーソルの動きがおもしろいです。
nvim-treesitter
- Tips: lazy.nvimでnvim-treesitterをセットアップする
- 私はTreeSitterに座れていなかった
- nvim-treesitter / nvim-treesitter(master branch 古い) Installation
- nvim-treesitter / nvim-treesitter(main branch 新しい)
- doc/nvim-treesitter.txt
- tree-sitter / tree-sitter
- Getting started using Lua in Neovim
- NeovimのためのLua入門 Lua基礎編
- NeovimのためのLua入門 init.lua編
tree-sitter-cli パッケージをインストールします。
sudo pacman -S tree-sitter-cli
init.lua に追加します。
~/.config/nvim/init.lua
require('lazy').setup({
'nvim-treesitter/nvim-treesitter',
lazy = false,
build = ':TSUpdate'
})
nvim-treesitter.lua ですが、これでいいのか自信はありませんが動作してるようです。
~/.config/nvim/lua/plugins/nvim-treesitter.lua
local M = {
"nvim-treesitter/nvim-treesitter",
build = function()
require("nvim-treesitter.install").update({ with_sync = true })()
end,
}
return { M }
nvim を起動すると ~/.local/share/nvim/lazy/nvim-treesitter/ にダウンロードされます。:TSUpdate lua で ~/.local/share/nvim/lazy/nvim-treesitter/parser/lua.so がダウンロードされます。:checkhealth nvim-treesitter :TSInstallInfo :TSUpdate などで確認してみてください。
Helix
Helix(ArchWiki)。ホームページは Helix A post-modern text editor. パッケージ extra/helix をインストールすればすぐに使えるようです。設定は ~/.config/helix/config.toml に書き込むようです。Configuration 以下に説明があります。
CudaText
CudaText はクロスプラットフォームで Object Pascal で書かれたオープンソースのエディターです。gtk2版とqt5版、qt6版がありますが、X11でgtk2版が日本語入力できます。qt6版はパッケージ qt6pas をインストールしないと起動しません。CudaText は Raku のシンタックスカラーリングがいいです。
Zed
Zed ですが、extra/zed 0.152.4-1 にありました。(このバージョンでは)ダウンロードはわずか 32.82 MiB です。ターミナルからは zeditor で起動します。
sudo pacman -S zed
zed の提案パッケージ
clang: improved C/C++ language support
eslint: improved Javascript language support
pyright: improved Python language support
rust-analyzer: improved Rust language support
Zed を起動して右上部にある ∨ をクリックして選択するかまたは Ctrl + , で設定が開きます。"buffer_font_family": "UDEV Gothic", とか書き込んで Ctrl + s でセーブします。設定すると日本語も表示されますが、日本語入力のほうがうまくいきません(extra/zed 0.163.2-1 で日本語入力できるようになりました、しかし文節の区切りの変更がうまくいきません。設定があるのでしょうか)。ワードラップは設定に "soft_wrap": "editor_width" と書き込めばいいようです。ui font も設定しなくては日本語ファイル名を表示できないようです。"ui_font_family": "IPAexGothic", などとします。
新規ファイルを開くには右上の + をクリックします。
保存する時に自動でフォーマットしてしまいます。これを完全にやめさせるには "format_on_save": "off", と設定します。(Zed Editor フォーマットさせない設定)
"Default keyring" をアンロックしたいとか言ってパスワードを要求するダイアログが出ます。ログインする時のパスワードを入力するか、パッケージ seahorse をインストールして「パスワードと鍵」で Default keyring のパスワードを削除しておけばダイアログはでなくなります。(GNOME/Keyring(ArchWiki))
デフォルトでATOMのようにテキストが表示され、美しいです(もっともATOMは「恋に落ちるエディッタ」Sublime Text のパクリと言われてましたね)。
Emacs
GNU Emacs はもちろん Richard Stallman がつくった有名なテキストエディタです。Emacs(ArchWiki) にも情報があります。blahgeek / emacs-appimage にAppImage版がありまが、x11: X11用、pgtk: waylandのpgtk用、nox: GUIなし の3種類があります。コマンド一覧表 が参考になります。残念ながら30.0.92 のGUI版は一部のメニューで落ちます。
(emacs:4736): Gtk-WARNING **: 10:22:36.565: Could not load a pixbuf from icon theme.
This may indicate that pixbuf loaders or the mime database could not be found.
**
[Solved] Could not load pixbuf from icon theme. gdk error crash が参考になりそうだと思ったのですが。
sudo chmod -R 755 /usr/share/mime
sudo update-mime-database /usr/share/mime
sudo chmod 644 /usr/share/applications/mimeinfo.cache
sudo gdk-pixbuf-query-loaders --update-cache
やってみましたが変化なし。pacman -Qi gdk-pixbuf2 で提案パッケージの libwmf libopenraw がインストールされてないことに気が付きました。
sudo pacman -S --asdeps libwmf libopenraw
これでもだめでした。AppImage版をあきらめてpacmanでインストールすることにしました。
sudo pacman -S emacs-wayland
ターミナルで使いたい場合は -nw(--no-window-system)オプションをつけて起動できます。
その他
Terminal Emulator
gnome-terminal
曖昧文字幅文字を全角で表示するのは GNOME の端末なら設定できます。fedora パッチ版の gnome-terminal-fedora もあります。こちらはウインドウを半透明にできます。半透明にすると圧迫感のようなものが軽減できるので fedora パッチ版の方がいいかもしれません。
sudo pacman -S gnome-terminal
コンソール
GNOME 標準の Console です。かなりシンプルです。
sudo pacman -S gnome-console
cool-retro-term
cool-retro-term は陰極線管(CRT)をシュミレートしたターミナルです。AppImage版( Cool-retro-term AppImage)を日々の pacman -Syu に使ってます。残念ながら日本語の入力ができませんでした。
Alacritty
Alacritty(ArchWiki) によると、 Alacritty は Rust によって書かれている、シンプルで GPU アクセラレーションを使用するターミナルエミュレータだそうです。
sudo pacman -S alacritty
設定は YAML ではなく TOML に変更されてます。設定については ターミナルをiTerm2からAlacrittyに変更した - 肉球でキーボード と config-alacritty それに man alacritty を参照してください。とりあえず ~/.config/alacritty/alacritty.toml をつくりました。
[shell]
program = "/bin/zsh"
[font]
normal = { family = "UDEV Gothic", style = "Regular" }
size = 12
Yaml configからTomlに切り替えろと言われたので`alacritty migrate`した
Foot
Foot(ArchWiki) によると、Foot は、高速、軽量、ミニマルな Wayland ターミナル エミュレータだそうです。日本語入力も改善されており、これまで試した中では最良のターミナル、と思ったのですがカーソルを右に移動させると縦の線が文字の間に残るときがあり、残念です(マウスでウインドウをゆすってみてください)。
sudo pacman -S foot
設定はまず /etc/xdg/foot/foot.ini を ~/.config/foot/foot.ini にコピーしてから編集します。コメントをはずして書き換えます(例えば次のように)。詳しくは foot.ini(5) を参照してください。
shell=/usr/bin/fish
font=UDEV Gothic:size=14
underline-offset=4px
initial-window-size-chars=120x30
underline-offset は日本語入力のときの下線が近すぎるので離しました。
カラーテーマは /usr/share/foot/themes にあるものから選択できます。[main]セクションに書けばよいのですが、[main] は省略できるようです。[environment] が現れる前の行に書いてください。
include=/usr/share/foot/themes/zenburn
背景を透明にするには [colors] の alpha を設定してください。これはカラーテーマを設定していても有効のようです。
[colors]
alpha=0.8
Foot Client と Foot Server が使わないのにアプリケーションメニューに現れてじゃまに感じる場合は、/usr/share/applications/foot-server.desktop と /usr/share/applications/footclient.desktop (以前は /usr/share/applications/org.codeberg.dnkl.foot-server.desktop と /usr/share/applications/org.codeberg.dnkl.footclient.desktop でした。)に NoDisplay=true 行を追加してください。
WezTerm
sudo pacman -S wezterm
Web Browser
Firefox
Firefox については ArchWiki に多くの情報があります。Firefox/プライバシー によると、トラッキング防止機能を有効化するとロード時間が 44% 短くなるそうです。2015年発表の論文なので少し古い情報と思ったのですが試してみました。Firefox を起動してアドレスバーに about:config と入力して、危険性を承知の上で先に進みます。privacy.trackingprotection.enabled を検索して切り替えボタンをクリックして値を true にします。使ってみると、本当に読み込みが早くなってるようです。広告ブロック拡張機能を使ってなかったからかもしれませんが。
about:support で グラフィック の ウィンドウプロトコル が wayland か xwayland か x11 かを見ることができます。wayland で起動しようとするのがデフォルトになってます。xwayland で起動したい場合は環境変数で export MOZ_ENABLE_WAYLAND=0 としてください。
むかしから bubblejail を使っている場合は、bubblejail-config で Application's D-Bus name に org.mozilla.* を設定してください。他のデスクトップで Firefox を起動していても、起動できるようになります。bubblejail のアップデートでこの設定が標準になってました。
Appimage版は srevinsaju / Firefox-Appimage にあります。
Web
Web は GNOME のコアアプリです。フォントの設定に時間がかかる上に、フォントが大きくならず小さすぎます。GNOME 上では正常に動作するのかもしれません。バージョンアップに期待するしかありません。パッケージ xdg-desktop-portal-gtk (syncs font settings to Flatpak apps when run in Plasma) をインストールすることで正常に表示されるようになりました。
flatpak install flathub org.gnome.Epiphany
近頃まともに動作しない状況でしたが、KDEシステム設定→アプリケーションの権限→Flatpakの権限で Web を選択、標準設定(D) をクリック。ファイルシステムへのアクセスのところを全部チェックして、All user files を 読み取り/書き込み にします。適用(A) をクリックで動作するようになりました。ですが、また調子の悪い状態が続いてます。Flatpak の権限で Session bus access と System bus access を許可すればいいようです。
GNOME/Web extra/epiphany があります。
Falkon
Falkon は KDE のウエブブラウザーです。普通に使えます。が、アドレスバーの横にある検索ウインドウに検索文字を入力するとき、一度確定させてしまうと次の日本語が変換できません。
flatpak install flathub org.kde.falkon
extra/falkon がありました。
Min browser
Min はプライバシーを守ってくれるミニマルなブラウザーです。AURにあります(aur/min-browser-bin)。操作が独特ですが慣れればいいのかもしれません。ですがアンインストールしました(2026年1月、electron38 も削除されました。~/.config/Min/ も削除です。/usr/lib/webkitgtk-6.0/MinBrowser と /usr/lib/webkit2gtk-4.1/MinBrowser も削除です。)
Chromium
Chromium はフリーかつオープンソースのウェブブラウザ向けのコードベースです。主にGoogleによって開発とメンテナンスが行われているそうです。Downloads for ungoogled-chromium から AppImage版をダウンロードしました。
xwayland ではなく wayland で動作させるには --ozone-platform-hint=auto --enable-wayland-ime をつけたせばいいようです。
AppImage を展開して、chromium.png をコピーして ~/.local/share/icons/chromium.png とします。ungoogled-chromium.desktop をコピーして ~/.local/share/applications/ungoogled-chromium.desktop とします。ungoogled-chromium.desktop の Exex= の AppRun を書き換えます。
ungoogled-chromium の機能拡張は Ungoogled Extensions からダウンロードしてインストールできますが、安全性はよくわからないので自己責任でお願いします。
Google Chrome
NCSA Mosaic
テキストと画像を同一のウインドウ内に表示することで革命をもたらしたブラウザーです。 NCSA-Mosaic-AppImage からダウンロードしました。動作はしますが https には対応できません。http://google.com にアクセスすることはできます。http://hadwiger.static.jp/mosaic/index.html をテスト用ページとして作ってみました。
Vivaldi
Vivaldi は、Chromium ベースのプロプライエタリのウェブブラウザです。Vivaldi-appimage から、stable 版 AppImge をダウンロードしました。.zync があるのでアップデートには zync2 が使えます。waylandネイティブで動作させるには --ozone-platform-hint=auto --enable-wayland-ime が必要なようです。
Brave
FixBrowser
ゼロから作られた超軽量ブラウザ「FixBrowser」のアルファ版公開、JavaScript非対応でリソース消費量を大幅削減 - GIGAZINE
FixBrowser
qutebrowser
qutebrowser、
qutebrowser(ArchWiki)、
danrobi11 /
qutebrowser-appimage から qutebrowser-3.2.0-x86_64.AppImage をダウンロードしましたが起動に失敗します。--appimage-extract で展開してみると問題の部分がすぐに見つかります。
squashfs-root/AppRun
exec "$HERE/usr/bin/python3" "$HERE/usr/bin/qutebrowser" --debug > "/home/danrobi/qutebrowser-appimage-run.log" 2>&1
この部分を次のように書き換えてセーブします。
exec "$HERE/usr/bin/python3" "$HERE/usr/bin/qutebrowser"
AppImage / appimagetool から appimagetool-x86_64.AppImage をダウンロードしてきて使えるようにしておきます。squashfs-root のあるディレクトリで次のコマンドを実行します。
PATH/appimagetool-x86_64.AppImage squashfs-root
すると Qutebrowser-x86_64.AppImage ができるので、これを使えばいいです。
Floorp
Floorp(フロープ)は、Mozilla Firefoxをベースとしたオープンソースのウェブブラウザです。
Floorp ブラウザー、 11orZee / Floorp-AppImage
MicroSoft Edge
Video Player
VLC media player
WebM(VP9) がうまく再生できないことに悩んできましたが、設定方法がわかりました。まず VLC メディアプレイヤー を起動します。ツール(S) メニューから 設定(P) を選択します。シンプルな設定ウインドウが開きますが、左下すみの 設定の表示 で すべて をチェックします。それから下にスクロールさせて 入力 / コーデック の ビデオコーデック をダブルクリックして、FFmpeg をクリックします。それから デコード中 の 「ダイレクトレンダリング」 のチェックをはずします。「処理を急ぐ」 のチェックもはずします。「ハードウェアデコーディング」 は 自動 でいいらしいのですが、自分の場合は VA-APIビデオデコーダー にしてます。保存(S) をクリックして設定を終えます。自分の場合、これで普通に再生できるようになりました。
まずターミナルからコマンドで再生できるか試したほうがいいかもしれません。
vlc --no-avcodec-dr --no-avcodec-hurry-up xxxx.webm
ターミナルで実行したとき次のようなメッセージを大量に出す場合は、
[0000591662fd7560] main libvlc error: stale plugins cache: modified /usr/lib/vlc/plugins/stream_extractor/libarchive_plugin.so
how to avoid main libvlc error when using the python vlc package を参考に次のコマンドを実行します。
sudo /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins
その後アップデートで、デコードは GPU を使わなくても WebM(VP9) を再生できるようになりました。レンダリングに GPU を使う設定にいつのまにかなってました。
Dragon player
Dragon Player Phonon ベースの KDE 用のシンプルなビデオプレイヤー。GPUを使わない動画プレーヤーのようです。
sudo pacman -S dragon
mpv
キーボードからの操作方法は man mpv で英語ですが説明されています。
sudo pacman -S mpv
そのほか
LibreOffice
LibreOffice。AppImage版は https://appimages.libreitalia.org/ から still.standard をダウンロードして使ってます。パッケージ libxml2-legacy をインストールしないと起動しません。
GIMP
GIMP から AppImage版をダウンロードできます。3.0.2 では 487.6MiB だったのが 3.0.4 では 148.7MiB と急激に小さくなってます。
Inkscape
INKSCAPE から AppImage版をダウンロードできます。
FileZilla
FileZilla - The free FTP solution。extra/filezilla があります。