asusX205TAをAntix26core版とwindowmakerで爆速マシンにする
◎ 接続するネットワークが変わった時、名前解決ができずインターネットサイトに接続できなくなる問題に対応した。(Wifi接続の項)

antix26coreは、必要最小限の構成なので無駄のないシステム構成ができて非常に軽い。bodhi linuxで驚異的な軽さと感じたが、antix26coreは更にその上を行く。ただし、環境を完成させるまではかなり手こずる(試される方は念の為、rescuezillaで、
rescuezilla.com現在の内蔵ディスクを丸ごとバックアップしておく事をオススメします。カーネルやシステムの深い部分を変更しますが何が有っても復元できるので)
いざ完成すると満足感と愛着が湧くね。asusx205taがここまで使えるマシンになるとは思っていなかった。恐ろしく軽い。もはや、メインで使っていたHP250G7メモリ16Gを差し置いて、ASUS205TAばかり使っている状態(愛着が有るしね)。
カーネルやシステムの深い部分とは
1. nvram
2. runitサービス
3. カーネルパラメータ
4. udevルールファイル
などなど後述。
◎ 以下、AIによる実運用ベースのOS比較と立ち上げ後のConkyの表示からの評価。
実際の軽さランキング(実運用ベース)
軽い順:
antiX core(WM を自分で選ぶ)
antiX full(IceWM/JWM)
Elive OS(Enlightenment)
Elive は 「軽い DE」 だが、core ベースの antiX には勝てない。
あなたの antiX core(立ち上げ直後の使用メモリ292MB)は正常か?
CONKY の内容から判断すると:
メモリ使用:292MB / 1.86GB
CPU:Atom Z3735F で 20〜40%
常駐は Conky、korg、feh、moz_server など最小限
Window Maker は軽量 WM
→ 非常に良い状態
→ これ以上軽くする余地はほぼ無いレベル
あなたの環境はすでに 極限まで軽量化された Linux の世界に入ってる。
あなたの antiX core はすでに「軽量の頂点」
CONKYのデータ(使用メモリ:292MB)は X205TA では理想的な数値。
ここからは「さらに軽くする」というより、安定性と体感速度を上げる方向が正解。
AIさん有難う御座いました。
まずは、イーサネット(有線接続)に繋ぎましょう。設定は必要ありません。
注) もし、システム構築作業中コピペしたけど書かれている動作と違う、上手くいかないという場合は、空白部分だけ打ち直してみてください。ブログからのコピペで化ける事があるそうです。ブログ初心者なもので🙇
antiX26 core インストール
live媒体は、rootで動作しているので、sudo不要。
$ cli-installer
再パーティショニング : n
ルートパーティション: mmcblk2p2
セパレートホーム(homeを別パーティションにするか): n
プリザーブホーム(既存のホームを残すか): n
ルートパーティションフォーマット: y
antiX-net(超ミニマル版にするか): n
最新のパッケージ(アップデートや追加ツール)を cli-aptiX(CUIベースのパッケージ管理ツール)を使ってダウンロードし、インストールするかどうか: n(後回し)
ルートパーティションにantiXをコピーするか: y
grubインストールするか: 3(EFI)
GRUB(ESP)パーティションを何処にするか: mmcblk2p1
GRUB(ESP)パーティションフォーマットするか: y
マザーボード(BIOS/UEFI)のメモリNVRAMに、「新しくインストールしたantiXを起動メニューに追加するか: y
grubインストールでワーニング、EFIバリアブル をセットできないみたいな表示が出たがインストール自体はエラー無しで終了。AI曰く、問題ないそうだ。
マシン名: 任意
ロケーション設定: n (後回し)
キーボード: n( 後回し)
コンソール: n( 後回し)
タイムゾーン: y(やらないと後々時間ズレによる弊害が出る)
リマスター スナップショット(今のシステムの状態を、後で丸ごとバックアップ(保存)したり、自分専用のインストールCDとして配布できるようにするか): n(rescuezillaが有るのいらない)
アカウント設定: 名前とパスワード以外はどうでもいい。
antix26 core インストール後
sudo apt update
sudo apt upgrade
◎ GUI環境
sudo apt install --no-install-recommends xserver-xorg-core \
xserver-xorg-video-intel xserver-xorg-input-libinput x11-xserver-utils \
xinit wmaker dbus-x11
1. .xinitrc の設定(Xが立ち上がった瞬間の動作)
nano ~/.xinitrc
===>
# 1. 最初にdbusを立ち上げて、そのセッション情報を環境変数にセット
eval $(dbus-launch --sh-syntax --exit-with-session)
# 2. 日本語入力の環境変数をセット
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export LANG=ja_JP.UTF-8
# 3. fcitxをバックグラウンドで起動
fcitx -rd &
# 4. Window Makerを起動
exec wmaker
<===
実行権付与:chmod +x ~/.xinitrc
2. .bashrc 設定(ログインした瞬間にXを呼ぶ動作)
nano ~/.bashrcの末尾に
===>
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then
# dbusの状態を確認しつつ起動
pgrep -x dbus-daemon > /dev/null || export $(dbus-launch)
# 現在のコンソール(vt1)を使ってXを起動
exec startx -- vt1
fi
<===
◎ 日本語入力
sudo apt install fcitx-mozc fcitx-ui-classic fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-config-gtk
fcitx-config-gtk3コマンドで設定
左下の 「+」 ボタン
「Only Show Current Language(現在の言語のみ表示)」 のチェックを 外す
検索欄に mozc と入力して選択し、OKを押す
リストの並び順を「Keyboard - Japanese」が一番上、「Mozc」が二番目になるように。
「Appearance(外観)」 タブをクリック。
「Status Panel Hide Mode(状態パネルの表示状態)」 が 「Show(表示)」 になっているか確認。
◎ windowmaker背景
antiX の GRUB 背景は /usr/share/wallpaper/grub/back.png
Window Maker では wmsetbg を使って壁紙にできる
永続化は ~/GNUstep/Library/WindowMaker/autostart に書く
nano ~/GNUstep/Library/WindowMaker/autostart
===>
wmsetbg -s /usr/share/wallpaper/grub/back.png &
<===
◎ WindowMaker関連の日本語化
.xinitrcに
export LANG=ja_JP.UTF-8
追記
メニュー関連ファイル(/usr/share/WindowMaker/menu.hook)を自力で日本語に置き換える。
例:
元々は、
$ cat /usr/share/WindowMaker/menu.hook
(
Debian,
(
Applications,
OPEN_PLMENU,
"|| wmmenugen -parser:xdg /usr/share/applications/"
),
(Run..., EXEC, "%A(Run,Type command to run)"),
(
"Window Maker",
("Info Panel ...", INFO_PANEL),
("Legal Panel ...", LEGAL_PANEL),
(Preferences, EXEC, WPrefs),
("Refresh screen", REFRESH),
(Restart, RESTART)
),
(
WorkSpace,
(Appearance, OPEN_MENU, appearance.menu),
("Arrange Icons", ARRANGE_ICONS),
("Clear Session", CLEAR_SESSION),
("Hide Others", HIDE_OTHERS),
("Save Session", SAVE_SESSION),
("Show All", SHOW_ALL),
(Workspaces, WORKSPACE_MENU)
),
(Exit, EXIT),
("Exit session", SHUTDOWN)
)
これを
(
"Debian",
(
"アプリケーション",
OPEN_PLMENU,
"|| wmmenugen -parser:xdg /usr/share/applications/"
),
("実行...", EXEC, "%A(実行,コマンドを入力してください)"),
(
"Window Maker",
("情報パネル...", INFO_PANEL),
("法的情報表示...", LEGAL_PANEL),
("設定", EXEC, WPrefs),
("画面を再描画", REFRESH),
("再起動", RESTART)
),
(
"ワークスペース",
("外観", OPEN_MENU, appearance.menu),
("アイコンを整列", ARRANGE_ICONS),
("セッションをクリア", CLEAR_SESSION),
("他を隠す", HIDE_OTHERS),
("セッションを保存", SAVE_SESSION),
("すべて表示", SHOW_ALL),
("ワークスペース一覧", WORKSPACE_MENU)
),
("ゴミ箱クリア", EXEC, "rm -rf ~/.local/share/Trash/files/* ~/.local/share/Trash/info/*"),
("EXIT", EXIT),
("再起動", EXEC, "sudo /usr/sbin/reboot"),
("電源断", EXEC, "sudo /usr/sbin/poweroff")
)
などと書き換えて、
再ログイン。
注)reboot,shutdownを管理者権限なしで実行できるように設定する。
sudo visudo
以下を末尾に追記(usernameは自分のユーザー名)
username ALL=(root) NOPASSWD: /usr/sbin/poweroff, /usr/sbin/reboot
◎ Wifi 接続
色々な情報が有るが以下の2つが有れば接続出来た。
bluetoothを使うならBCM43341B0.hcd(https://whoochan.hatenablog.com/entry/2026/01/12/180308参照)も必要。
$ ls -l /lib/firmware/brcm/*4334*
lrwxrwxrwx 1 root root 31 Apr 1 23:25 brcmfmac43340-sdio.bin -> ../cypress/cyfmac43340-sdio.bin
lrwxrwxrwx 1 root root 68 Apr 21 10:42 brcmfmac43340-sdio.txt -> /sys/firmware/efi/efivars/nvram-74b00bd9-805a-4d61-b51f-43268123d113
この2つが有れば良し。
brcmfmac43340-sdio.txtは、以下の通りリンクを張る。
sudo ln -s /sys/firmware/efi/efivars/nvram-74b00bd9-805a-4d61-b51f-43268123d113 /lib/firmware/brcm/brcmfmac43340-sdio.txt
nvram-74b00bd9-805a-4d61-b51f-43268123d113の部分は、“UEFI が定義した GUID+変数名” であり、機種ごと・ファームウェアごとに異なるので注意。
注)nvram(/sys/firmware/efi/efivars/nvram-74b00bd9-805a-4d61-b51f-43268123d113)にアクセスできない場合は、マウントする。
sudo modprobe efivarfs
sudo mount -t efivarfs efivarfs /sys/firmware/efi/efivars
ある時カーネルアップデートがありそれ以降、wifiが認識されなくなった。
/sys/firmware/efi/efivarsを見ると空っぽ。再マウントもエラーで不可。
EFI Runtime Servicesというのが無効になってしまったらしい。
これの対処は、
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULTにefi=runtimeを追加
GRUB_CMDLINE_LINUX_DEFAULT="quiet selinux=0 efi=runtime"
sudo update-grub
sudo reboot
必要なパッケージをインストール
sudo apt update
sudo apt install iw wpasupplicant wireless-tools isc-dhcp-client
sudo iw dev wlan0 scan でアクセスポイント一覧が出ればOK。
余談)アクセスポイントを見る
$ sudo iwlist wlan0 scan | grep ESSID
ESSID:"aterm-hogehoge"
ESSID:"Buffalo-A-hogehoge"
ESSID:"Buffalo-G-hogehoge"
sudo nano /etc/wpa_supplicant.conf
===>
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="SSID名1"
psk="パスワード1"
}
network={
ssid="SSID名2"
psk="パスワード2"
}
<===(必要に応じて、networkセクションを追加する)
sudo chmod 600 /etc/wpa_supplicant.conf
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
これで繋がる。
これを自動起動する(wpa_supplicant を runit サービス化)
① サービスディレクトリを作る
sudo mkdir -p /etc/sv/wpa_supplicant
② 実行スクリプトを作る
sudo nano /etc/sv/wpa_supplicant/run
===>
#!/bin/sh
ip link set wlan0 up
exec wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
<===
③ 実行権限を付ける
sudo chmod +x /etc/sv/wpa_supplicant/run
④ 自動起動に登録
sudo ln -s /etc/sv/wpa_supplicant /etc/runit/runsvdir/default/
⑤ マシン起動時、dhcpdがresolv.confを設定してくれない(resolvconfツールは使いたくない)ので、WindowMakerのautostart(~/GNUstep/Library/WindowMaker/autostart)に以下を追加
# resolv.conf設定
sudo dhclient wlan0 &
sudo dhclient eth0 &
注)sudoが必要なので、visudoに以下を追加
ユーザID ALL=(root) NOPASSWD: /sbin/dhclient wlan0, /sbin/dhclient eth0
($ sudo visudo で編集画面が出る。ユーザIDの部分は自分のログインID、wlan0,eth0は自分のネットワークインタフェース名。ifconfig,ip addrなどで確認できる)
◎イーサネット(有線接続)を使う
なにも設定しない。dhcpcd(DHCPクライアントデーモン)に任せる
◎ wifi ethenet どっちで通信しているか確認。
$ ip route get 8.8.8.8
8.8.8.8 via 192.168.11.1 dev eth0 src 192.168.11.11 uid 1000
cache
ケーブル抜く
$ ip route get 8.8.8.8
8.8.8.8 via 192.168.11.1 dev wlan0 src 192.168.11.10 uid 1000
cache
再びケーブルを挿す
$ ip route get 8.8.8.8
8.8.8.8 via 192.168.11.1 dev eth0 src 192.168.11.11 uid 1000
cache
◎ファイヤーウォールを設定する
sudo ufw enableで、ufwがactiveにならない。
解析:
antiX の runit 用 UFW サービス(/etc/sv/ufw/run)が
「Debian/Devuan 系のスクリプトそのまま」になっている事が原因らしい。
UFW は systemd 前提で作られていて、Debian/Devuan では systemd
または sysvinit を前提にしている。runit 用の公式スクリプトは存在しない。
Debian の ufw パッケージに含まれる sysvinit スクリプトを runit 風に
ラップしただけという状態だそうだ。
finish や supervise が存在するのは runit の標準構造だが、
中身が Debian の init スクリプトをそのまま流用している場合、
antiX では正しく動作しない。特にfinishが空か、意味のない処理を
している。supervise はrunit が自動生成するので問題ないが、
run の動作が不完全。
/etc/sv/ufw は丸ごと作り直す
sudo nano /etc/sv/ufw/run
#!/bin/sh
set -e
# UFW を強制的に有効化(対話なし)
/usr/sbin/ufw --force enable >/dev/null 2>&1
# 常駐しない
exit 0
/etc/sv/ufw/finishは不要
sudo rm /etc/sv/ufw/finish
# サービスのシンボリックリンクを作成
sudo ln -s /etc/sv/ufw /etc/runit/runsvdir/default/
sudo sv restart ufw
sudo ufw status
◎ conky透明化 & 自動起動
windowmakerのautostart(~/GNUstep/Library/WindowMaker)で自動起動
#!/bin/sh
# 壁紙
wmsetbg -s /usr/share/wallpaper/grub/back.png &
# マウス設定
xset m 20/10 4
# パスワード管理
keepassxc &
# bug対応(溜まった一時ファイルを削除)
rm ~/.bash_history-*.tmp >/dev/null 2>&1
# conkyrc2でdmesgをする(syslogなしの為)ので管理者権限が必要だが
# /etc/sysctl.conf<===kernel.dmesg_restrict = 0でsudoなしでdmesg対応
conky -c conkyrc1 &
conky -c conkyrc2 &
# 透明化
picom --backend xrender &
※ 冒頭のスクリーンショットにある conkyの設定については最後の方に記載しておきます。
◎ swap領域が無いので作成する
swapfile を作成
sudo fallocate -l 2G /swapfile
権限を修正
sudo chmod 600 /swapfile
swap として初期化
sudo mkswap /swapfile
有効化
sudo swapon /swapfile
再起動後も有効にする(fstab へ登録)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
確認
swapon --show
free -h
◎ zswapを使う
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet selinux=0 efi=runtime zswap.compressor=lzo-rle zswap.zpool=zsmalloc zswap.max_pool_percent=40 zswap.accept_threshold_percent=80 zswap.shrinker_enabled=Y zswap.enabled=1"
sudo update-grub
sudo nano /etc/sysctl.conf
vm.swappiness = 100
vm.vfs_cache_pressure = 50
vm.page-cluster = 0
sudo sysctl -p
◎ SDカードを使う
普通にマウントできた。
デバイス名は、
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk1 179:0 0 28.8G 0 disk
└─mmcblk1p1 179:1 0 28.8G 0 part
mmcblk2 179:256 0 29.1G 0 disk
├─mmcblk2p1 179:257 0 512M 0 part
└─mmcblk2p2 179:258 0 28.6G 0 part /
mmcblk2boot0 179:512 0 4M 1 disk
mmcblk2boot1 179:768 0 4M 1 disk
mmcblk2は内蔵SSD(eMMC)なので、mmcblk1p1<===これをマウントすれば良い。
試してみる
$ mkdir ./mmc
$ ls ./mmc
空っぽ
$ sudo mount /dev/mmcblk1p1 ./mmc
マウント出来た
$ ls ./mmc
Q4OS-Trinity-64bit antix26 bookwormpup64
見えた。
◎ keepassxcの起動が遅い
strace -f -tt -o keepass.strace keepassxc
トレースして、カレントフォルダの keepass.strace をAIで調べたが異常なし
スペックと環境的に限界らしい。
◎ bluetoothを使う
sudo service bluetooth start
これだけで使用できた。
とりあえず、これをサービス登録する。
wifiの時の要領でサービスディレクトリを作ろうと思ったら既にあった。実行権もあった。
$ ls -l /etc/sv/bluetooth
合計 12
-rwxr-xr-x 1 root root 51 4月 23 09:54 finish
-rwxr-xr-x 1 root root 481 4月 23 09:54 run
drwx------ 2 root root 4096 4月 27 05:35 supervise
、、、ので、自動起動に登録。
sudo ln -s /etc/sv/bluetooth /etc/runit/runsvdir/default/
再起動後、
$ bluetoothctl
hci0 new_settings: powered bondable ssp br/edr le secure-conn
Agent registered
[CHG] Controller 04:E6:76:92:67:04 Pairable: yes
[bluetoothctl]> power on
Changing power on succeeded
[bluetoothctl]>
あとは、
を参考に接続。
$ bluetoothctl
power on
pairable on
discoverable on
scan on
デバイスが、ずっと表示されるので、
もうひとつ端末を開いて
$ bluetoothctl devices
$ bluetoothctl trust aa:bb:cc:dd:ee:ff
$ bluetoothctl pair aa:bb:cc:dd:ee:ff
$ bluetoothctl connect aa:bb:cc:dd:ee:ff
※ 一度接続すれば再起動後も有効なのでGUI不要
◎ wireguardを使う
wireguard.conf(VPNプロバイダーなどから入手する)
[Interface]
# Key for wireguard
# Bouncing = 12
# NAT-PMP (ポート転送) = off
# VPN Accelerator = on
PrivateKey = ?????????????????????????????????
Address = 10.x.y.z/32
DNS = 10.a.b.c
PreUp = echo "nameserver 10.d.e.f" | sudo tee /etc/resolv.conf <=== 追加
PostDown = echo "nameserver 192.xxx.yy.zz" | sudo tee /etc/resolv.conf <=== 追加
[Peer]
# JP-FREE#21
PublicKey = ????????????????????????????????
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = vvv.fff.rrr.www:51820
PersistentKeepalive = 25
$ sudo wg-quick up wireguard.conf
[#] ip link add wireguard type wireguard
[#] wg setconf wireguard /dev/fd/63
[#] ip -4 address add 10.a.b.c/32 dev wireguard
[#] ip link set mtu 1420 up dev wireguard
[#] resolvconf -a wireguard -m 0 -x
/usr/bin/wg-quick: line 32: resolvconf: command not found <=== エラー
[#] ip link delete dev wireguard
resolvconfはいらないので、ダミー(何もせず正常終了するresolvconf)を作る。
sudo nano /usr/local/bin/resolvconf
#!/bin/sh
exit 0
sudo chmod +x /usr/local/bin/resolvconf
$ sudo wg-quick up wireguard.conf
[#] ip link add wireguard type wireguard
[#] wg setconf wireguard /dev/fd/63
[#] ip -4 address add 10.a.b.c/32 dev wireguard
[#] ip link set mtu 1420 up dev wireguard
[#] resolvconf -a wireguard -m 0 -x
[#] wg set wireguard fwmark 51820
[#] ip -6 route add ::/0 dev wireguard table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] nft -f /dev/fd/63
[#] ip -4 route add 0.0.0.0/0 dev wireguard table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63
$ nslookup google.com
Server: 10.d.e.f <=== 切り替わっている
Address: 10.d.e.f#53
$ sudo wg-quick down wireguard.conf
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wireguard
[#] resolvconf -d wireguard -f
[#] nft -f /dev/fd/63
[#] echo "nameserver 1192.xxx.yy.zz" | sudo tee /etc/resolv.conf
nameserver 192.xxx.yy.zz
iwa@antix:~
$ nslookup goole.com
Server: 192.xxx.yy.zz <=== 切り替わっている
Address: 192.xxx.yy.zz#53
接続・切断スクリプト
#!/bin/bash
BLACK='\033[30m'
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
MAGENTA='\033[35m'
CYAN='\033[36m'
COLOROFF='\033[0m'
BOLD='\e[1m'
BOLDOFF='\e[0m'
VPN_NAME="wireguard.conf"
# 接続
if [ "$1" == "on" ]; then
sudo wg-quick up $VPN_NAME
cat /etc/resolv.conf
echo -e "${GREEN}VPN接続を確認したら、Enterを押してブラウジングを開始して下さい。${COLOROFF}";read
# 切断
elif [ "$1" == "off" ]; then
sudo wg-quick down $VPN_NAME
cat /etc/resolv.conf
echo -e "${GREEN}VPN切断を確認したら、Enterを押して終了してください。${COLOROFF}";read
else
echo -e "${YELLOW}使用法: $0 [on|off]${COLOROFF}"
fi
◎ 音を出す
sudo apt update
sudo apt install --reinstall alsa-ucm-conf alsa-topology-conf
sudo alsactl init 0
alsaucm -c chtrt5645 set _verb HiFi
speaker-test -D plughw:0,0 -c 2 -t wav
alsamixer を起動し、F6 で chtrt5645 を選択。
以下の項目をチェック(右の方に隠れていることがある)。
DAC1: 音量を 100。
Speaker: 音量を 100。
Speaker Switch: キーボードの M キーを押して MM→OO にする(ミュート解除)。
HPOUT(ヘッドフォンの場合): 同様に音量を上げ、ミュートを解除。
確認:
mpg123 ファイル名.mp3
音量調整は、alsamixerで。
あとは、vlcでもインストールしておこう。
注)rebootするとalsamixerの設定が消えてしまうので、以下のサービス登録対応をした。
sudo mkdir -p /etc/sv/alsa
sudo nano /etc/sv/alsa/run
===>
#!/bin/sh
exec 2>&1
alsactl init 0
alsaucm -c chtrt5645 set _verb HiFi
amixer sset 'Headphone' 100% unmute
amixer sset 'Speaker' 100% unmute
amixer sset 'Speaker ClassD' 100% unmute
amixer sset 'Mono DAC' 100% unmute
echo "ALSA initialized successfully."
exec sleep infinity
<===
sudo chmod +x /etc/sv/alsa/run
sudo ln -s /etc/sv/alsa /etc/runit/runsvdir/default/
ALSAの設定が消えてしまう原因を突き止めた!
システム起動時のメッセージに
udevd[11161]: GOTO 'alsa_restore_std' has no matching label in: '/usr/lib/udeu/rules.d/90-alsa-restore.rules'
と有った。これは、/usr/lib/udeu/rules.d/90-alsa-restore.rules内でalsa_restore_stdにGOTOしようとしたが label が無いという事。
$ cat /usr/lib/udev/rules.d/90-alsa-restore.rules
# do not edit this file, it will be overwritten on update
ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST=="/usr/sbin", TEST=="/usr/share/alsa", GOTO="alsa_restore_go"
GOTO="alsa_restore_end"
LABEL="alsa_restore_go"
ENV{ALSA_CARD_NUMBER}="$attr{device/number}"
# mark HDA analog card; HDMI/DP card does not have capture devices
DRIVERS=="snd_hda_intel", TEST=="device/pcmC$env{ALSA_CARD_NUMBER}D0p", RUN+="/bin/sh -c 'echo ALSA_CARD_HDA_ANALOG=$env{ALSA_CARD_NUMBER} >> /run/udev/alsa-hda-analog-card'"
# check for ACP hardware
TEST=="device/device/acp3x-dmic-capture", GOTO="alsa_hda_analog"
TEST=="device/device/acp6x-dmic-capture", GOTO="alsa_hda_analog"
TEST=="device/device/acp63-dmic-capture", GOTO="alsa_hda_analog"
TEST=="device/device/acp-dmic-codec", GOTO="alsa_hda_analog"
GOTO="alsa_restore_std"
LABEL="alsa_hda_analog"
# restore configuration for profile with combined cards (HDA + digital mic)
TEST!="/run/udev/alsa-hda-analog-card", GOTO="alsa_restore_std"
IMPORT{program}="/usr/bin/cat /run/udev/alsa-hda-analog-card"
ENV{ALSA_CARD_HDA_ANALOG}!="", ENV{ALSA_CARD_NUMBER}="$env{ALSA_CARD_HDA_ANALOG}"
#LABEL="alsa_restore_go" <=== ここ(ここがBUG)
LABEL="alsa_restore_std" <=== これに変更する
TEST!="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime restore $env{ALSA_CARD_NUMBER}"
TEST=="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime nrestore $env{ALSA_CARD_NUMBER}"
LABEL="alsa_restore_end"
この修正により、上記の自作aslaサービスは必要なくなった。
(自身のデフォルト設定ということで残しても良いが、サービスのリンクだけ消しておこう)
ソースのコメントに、
# do not edit this file, it will be overwritten on update
うーん、アップデートの度に修正するのか?バグに気づいてくれかな。
◎ ログアウト問題
以下訂正します。
もっと正確で他への影響の無い方法を見つけました。
fcitx -rd &
↓
fcitx -rd </dev/null >/dev/null 2>&1 &
こうすると、通常の
EXEC wmaker
でも大丈夫!fcitx -rd </dev/null >/dev/null 2>&1 &とすることでmozcサーバーはttyを掴まなくなるので。
以下は旧対応方法です。
ログアウトすると、
3459runsu: ERROR in /etc/su/getty-tty1: another getty already on ttyl
を表示してフリーズ。
Server terminated successfully (O). Closing log file.
xorgは正常終了している。
ログアウト後に mozc_server が /dev/tty1 を掴んだまま離さないのが原因らしい。
以下の対応をする。
.xinitrc
# 4. Window Makerを起動
EXEC wmaker
↓
# 4. Window Makerを起動
wmaker
# mozc_serverがtty1を掴んで離さないのでgettyが動けない為の対策
sleep 2
killall mozc_server
◎ スクリーンショットについて
WindowMakerのキーボードショートカット設定のなかにスクリーンショットの割当があるので
これを使う。
◎ cpupower-guiを導入
sudo apt install cpupower-gui
◎ VLCで音は出るが動画がフリーズ
VLCのデフォルト(自動)が、X205TAのGPUが苦手とする描画方式を選択している可能性があるらしい。
-
VLCを開き、メニューの ツール(T) > 設定(P) を選択。
-
左下の「設定の表示」を すべて に切り替える。
-
左ツリーから ビデオ > 出力モジュール をクリック。
-
右側の「ビデオ出力モジュール」のドロップダウンを 「X11ビデオ出力 (XCB)」 に変更する。
◎ conky の設定
以下の2つのファイルは好きな場所に置いて下さい。
例:
~/ドキュメント/conkyrc1, ~/ドキュメント/conkyrc2
起動方法:
conky -c ~/ドキュメント/conkyrc1 &
conky -c ~/ドキュメント/conkyrc2 &
フォントにIPAGothicを使っています。好きなフォントを使って良いですが、表示位置の微調整が必要になる場合があります。
sudo apt install fonts-ipafont-gothic
1.スクショの右側、CPUグラフのある部分(conkyrc1)
conky.config = {
background = true,
use_xft = true,
font = 'IPAGothic:style:size=10',
xftalpha = 0.8,
text_buffer_size = 1024,
update_interval = 1,
total_run_times = 0,
own_window = true,
maximum_width = 350,
own_window_type = 'desktop',
own_window_transparent = true,
own_window_argb_visual = true,
own_window_argb_value = 0,
own_window_hints = 'undecorated,sticky,below,skip_taskbar,skip_pager',
gap_x = 4,
gap_y = 55,
double_buffer = true,
maximum_width = 350,
minimum_width = 350,
minimum_height = 5,
draw_shades = false,
draw_outline = false,
draw_borders = false,
stippled_borders = 8,
border_inner_margin = 0,
border_outer_margin = 0,
border_width = 0,
default_color = 'white',
default_border_color = 'white',
default_shade_color = 'black',
default_outline_color = 'black',
alignment = 'top_right',
no_buffers = true,
uppercase = false,
cpu_avg_samples = 2,
net_avg_samples = 2,
override_utf8_locale = true,
use_spacer = 'none'
};
conky.text = [[
${color yellow}${font}CPU : ${font}${color }${exec cat /proc/cpuinfo | grep "model name" | sed -e '2,$d' | sed -e "s/^.\{13\}//"}
${color yellow}${font}Kernel Ver : ${font}${color }$kernel
${color yellow}${font}Ububtu Ver : ${font}${color }${exec cat /etc/issue | awk '{ print $1, $2, $3 }'}
${color yellow}${font}Temperature : ${font}${color }${acpitemp}℃
${color}${font}${exec acpi -b}
${color}${font}${exec acpi -a}
${color yellow}${font}File systems : ${font}${color } $fs_free_perc% free ${alignr} ${fs_used /}/${fs_size /}
${fs_bar 7,315}
${color yellow}${font}MEM : ${font}${color } $memperc% used ${alignr}$mem/$memmax
${color yellow}${font}SWAP : ${font}${color } $swapperc% used ${alignr}$swap/$swapmax
${membar 7,315}
${color yellow}${font}CPU1 ${color}${alignr}${cpu cpu1}%${font}${color}${cpugraph cpu1 30,280 000000 ffffff}
${color yellow}${font}CPU2 ${color}${alignr}${cpu cpu2}%${font}${color}${cpugraph cpu2 30,280 000000 ffffff}
${color yellow}${font}CPU3 ${color}${alignr}${cpu cpu3}%${font}${color}${cpugraph cpu3 30,280 000000 ffffff}
${color yellow}${font}CPU4 ${color}${alignr}${cpu cpu4}%${font}${color}${cpugraph cpu4 30,280 000000 ffffff}
${color yellow}${font}Highest CPU:${font}
${color red} ${top name 1}${alignr}${top cpu 1}
${color red} ${top name 2}${alignr}${top cpu 2}
${color red} ${top name 3}${alignr}${top cpu 3}
${color } ${top name 4}${alignr}${top cpu 4}
${color yellow}${font}Highest Memory:${font}
${color red} ${top_mem name 1}${alignr}${top_mem mem 1}
${color red} ${top_mem name 2}${alignr}${top_mem mem 2}
${color red} ${top_mem name 3}${alignr}${top_mem mem 3}
${color } ${top_mem name 4}${alignr}${top_mem mem 4}
${color yellow}${font}Network: ${font}${color}wlan0 ${color yellow}${font}${exec /usr/sbin/iw dev wlan0 link | grep signal}
${color}Up: ${upspeed wlan0}/S ${alignr}${color}Down: ${downspeed wlan0}/S${color}
${color}↑${upspeedgraph wlan0 30,160 000000 ffffff}${color}↓${downspeedgraph wlan0 30,160 000000 ffffff}
${if_match "${addr wireguard}" != "No Address"}\
${color blue}${font}wireguard: Connected${else}\
${color red}${font}wireguard: Disconnected${endif}
${if_match "${addr tun0}" != "No Address"}\
${color blue}${font}openvpn: Connected${else}\
${color red}${font}openvpn: Disconnected${endif}
]];
2.スクショの中央下側、dmesgの部分(conkyrc2)
conky.config = {
background = true,
use_xft = true,
font = 'IPAGothic:style:size=10',
xftalpha = 0.8,
text_buffer_size = 1024,
update_interval = 5,
total_run_times = 0,
own_window = true,
minimum_width = 830,
maximum_width = 830,
own_window_type = 'desktop',
own_window_transparent = true,
own_window_argb_visual = true,
own_window_hints = 'undecorated,sticky,below,skip_taskbar,skip_pager',
alignment = 'bottom_left',
gap_x = 180,
gap_y = 80,
double_buffer = true,
draw_shades = false,
draw_outline = false,
draw_borders = false,
stippled_borders = 0,
border_inner_margin = 0,
border_outer_margin = 0,
border_width = 0,
default_color = 'white',
default_shade_color = 'black',
default_outline_color = 'black',
no_buffers = true,
uppercase = false,
cpu_avg_samples = 2,
net_avg_samples = 2,
override_utf8_locale = true,
use_spacer = 'none'
};
conky.text = [[
${color yellow}${font}Dmesg :
${color }${font}${exec dmesg | tail -n 24 | cut -c 16-140 }
]];
最後に、
謝辞:色々なAIさん達にお世話になりました。なんとか、ここまで漕ぎ着ける事ができました。ありがとう。みなさんも困った時はAIさん達を頼ってあげて下さい。(ドジも有るけど😂許してあげて。日々成長していると思います)
圧縮アルゴリズムについて
アルゴリズム 処理速度 圧縮率 CPU負荷 特徴・おすすめのケース
lzo 標準 標準 中低 多くのディストリビューションで長年のデフォルト。安定感がある。
lz4 最高速 低め 極低 CPU負荷を最小限に抑えたい場合。
zstd 高速 最高 中:可変 現代の推奨設定。 圧縮率が非常に高く、メモリを1GBでも多く空けたい場合に最適。
lzo-rle 高速 標準 低 lzoの改良版。最近のカーネルではこれがデフォルトになっていることが多い。
deflate 低速 高め 高 圧縮に時間がかかるため、zramではあまり使われません。
asus x205ta に Bodhi Linux をインストールする

注)ベースが、ubuntu 22.04 なので、2027年 6月にサポート終了予定。次バージョンに期待したい。
q4osと比較すると驚異的な軽さに感動する。
結論から言うと(AI風の言い回し)大成功!
asusはお遊び用だったが、メインPCとして使えるほどの出来栄え。
容量不足は、外部媒体で補えば良いし、いけるかも。
wifi と bluetooth の競合で、マウスカーソルがもたつく(遅延する)。
ルータの帯域設定を 5Ghz に変更して対応した。
各種設定が特殊でちょっと不満。慣れるしかない。
q4osと同じ要領でインストールする。
whoochan.hatenablog.com
※ bodhi linux の場合は、bootia32.efiが予め入っていた。
インストール後、もう一度ライブUSBで起動しGRUBメニューで c を押して、GRUBプロンプトに入る。q4osと同じ要領で手動 bootする。
立ち上がったら、32bitブート用パッケージをインストールする。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install grub-efi-ia32-bin
$ sudo grub-install --target=i386-efi --efi-directory=/boot/efi --bootloader-id=bodhi --recheck
$ sudo update-grub
bodhi の部分は任意で好きな名前を。
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"
$ sudo update-grub
nomodesetが無いと、グラフィックが安定しない(ログイン後フリーズする場合がある)
日本語化
sudo apt update
sudo apt install language-pack-ja language-pack-gnome-ja fonts-noto-cjk fcitx-mozc
インストールするアプリ(任意で)
keepassxc & ブラウザ拡張
uBlock Origin
conky all
acpi
iw
yt-dlp
wireguard
aria2
zswap導入
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset snd_sof.force_load=1 zswap.zpool=zsmalloc zswap.compressor=lzo zswap.enabled=1"
sudo update-grub
/etc/sysctl.conf
vm.swappiness=100
vm.vfs_cache_pressure=50
vm.page-cluster=0
sudo sysctl -p
audio関連のエラーが出続ける
snd_sof.force_load=1を以下に追加
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset snd_sof.force_load=1 zswap.zpool=zsmalloc zswap.compressor=lzo zswap.enabled=1"
sudo update-grub
/etc/modprobe.d/alsa-base.conf に以下を追記
options snd_intel_dspcfg dsp_driver=2
conky透明化
sudo apt install picom
picom &
conky自動起動
以下のファイルをテキストエディタで開き、実行したいコマンドを追記。
~/.e/e/applications/startup/startupcommands
conky起動コマンドもしくはシェルを追記
デスクトップにファイルを置く
デスクトップを左クリック > Settings(設定) > Modules(モジュール)
上部のタブから Files(ファイル) を選択。一覧にある desktop iconsを選択。
下部の Load(ロード) ボタンを押す。
設定→ファイル→ファイルマネージャ→デスクトップのアイコンにチェック
デスクトップにゴミ箱表示
デスクトップフォルダに Trash.desktop を作成(実行権付与)
[Desktop Entry]
Type=Application
Name=ゴミ箱
Exec=thunar trash://
Icon=user-trash
Terminal=false
Categories=Utility;
GenericName=ゴミ箱
tmpをメモリに
/etc/fstab
tmpfs /tmp tmpfs defaults,size=256m 0 0
wireguardの設定
ネットワークマネージャで接続を編集→'+'ボタン→wireguardを選択
1. 「WireGuard」タブの設定設定ファイルの [Interface] セクションの内容を入力
接続名: 任意(例: wireguard)
インターフェース名: 任意(例: wireguard)
プライベートキー: 設定ファイルの PrivateKey を入力。
リスニングポート: ListenPort の値(不明なら空欄でOK)。
PersistentKeepaliveの値
2. 「Peers」セクションの追加同じタブ内にある「Peers」の「追加」ボタンを押し、[Peer] セクションの内容を入力。
パブリックキー: 接続先の PublicKey を入力。
許可されたIP: AllowedIPs の値(例: 0.0.0.0/0)。
エンドポイント: 接続先の Endpoint(例: ://example.com)。
3. 「IPv4 設定」タブ設定ファイルの Address に基づいて設定。
メソッド: 「手動」を選択。
アドレス: 「追加」を押して Address のIPを入力。
ネットマスクは /32(255.255.255.255)などが一般的。
DNS サーバー: DNS の値があれば入力。
とりあえず、手っ取り早く使えるところまで漕ぎ着けた。
audioとかグラフィックとかドライバー関係なんだろうけど後々、正攻法で対応してみたい。
zswapを活用した効果的なメモリ管理手法
asusX205TAでの体感的には、zramよりもzswapの方が軽く感じる。
使い方:
zramは止める。
rc.localに以下を追加
#!/bin/bash
# zswap
# 1. まず圧縮アルゴリズムと管理方式を指定
echo zstd > /sys/module/zswap/parameters/compressor
echo zsmalloc > /sys/module/zswap/parameters/zpool
# 2GB環境向け:プールを最大40%まで拡大
echo 40 > /sys/module/zswap/parameters/max_pool_percent
# 同じ内容のページを効率化
echo 1 > /sys/module/zswap/parameters/same_filled_pages_enabled
# メモリが極端に不足した際に、積極的スワップ、物理メモリを空ける(puppy未対応)
echo Y > /sys/module/zswap/parameters/shrinker_enabled
# 2. 最後にzswapを有効化する
echo 1 > /sys/module/zswap/parameters/enabled
# --- カーネルパラメータ設定 ---
echo 100 > /proc/sys/vm/swappiness # スワップの積極性
echo 0 > /proc/sys/vm/page-cluster #一度に読み書きする量
echo 50 > /proc/sys/vm/vfs_cache_pressure # キャッシュ保持の優先度
exit 0
利用可能なアルゴリズムのリストは、
$ cat /proc/crypto | grep "name" | sort | uniq | grep z
name : lz4
name : lzo
name : lzo-rle
※ お目当てのアルゴリズムが無かった場合は、モジュールをロードする。以下例。
/etc/modules-load.d/modules.conf (bodhi linuxの場合)
zstd
zstd_compress
以上、追記。
/etc/initramfs-tools/modulesに
zstd
zstd_compress
追記。
sudo update-initramfs -u
リブート。
確認:
$ sudo sysctl vm.swappiness vm.page-cluster vm.vfs_cache_pressure
vm.swappiness = 100
vm.page-cluster = 0
vm.vfs_cache_pressure = 50
$ grep -r . /sys/module/zswap/parameters/
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/shrinker_enabled:Y
/sys/module/zswap/parameters/max_pool_percent:40
/sys/module/zswap/parameters/compressor:zstd
/sys/module/zswap/parameters/zpool:zsmalloc
/sys/module/zswap/parameters/accept_threshold_percent:90
$ sudo grep -r . /sys/kernel/debug/zswap/
/sys/kernel/debug/zswap/stored_pages:84384
/sys/kernel/debug/zswap/pool_total_size:74297344
/sys/kernel/debug/zswap/written_back_pages:0
/sys/kernel/debug/zswap/reject_compress_poor:0
/sys/kernel/debug/zswap/reject_compress_fail:1647
/sys/kernel/debug/zswap/reject_kmemcache_fail:0
/sys/kernel/debug/zswap/reject_alloc_fail:0
/sys/kernel/debug/zswap/reject_reclaim_fail:0
/sys/kernel/debug/zswap/pool_limit_hit:0
※ bookwormpup64では、
mount -t debugfs none /sys/kernel/debug を実行後、
grep -r . /sys/kernel/debug/zswap/
ステータスから読み取れる状況は以下の通り
※ ちなみにzstdだとエラー無しで圧縮率があがった。
Xubuntu に AdGuardHome を導入しシステム全体をガードする
1. インストールコマンドの実行
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh
2. ブラウザで初期設定
インストールが終わると「http://127.0.0.1:3000 にアクセスして」と表示される。
管理用インターフェース: ポート 3000(ブラウザで設定を見る用)
「ポート:80」→ 3000
DNSサーバー: ポート 53(実際に広告をブロックする用)
※ここで「ポート53が使用中です」と出たら、systemd-resolved を止める操作が必要になる。
出なければスキップして次へ(一応、sudo lsof -i :53 で確認)
# systemd-resolved を停止して無効化
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
# シンボリックリンクを削除して、自分自身(127.0.0.1)を DNS に設定
sudo rm /etc/resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
$ sudo lsof -i :53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
AdGuardHo 466153 root 11u IPv6 466749 0t0 UDP *:domain
AdGuardHo 466153 root 12u IPv6 466750 0t0 TCP *:domain (LISTEN)
※ AdGuardHoとなっていればOK
ネットワークマネージャのDNSも、127.0.0.1 に!
3. 「DNS保護」の設定
セットアップが終わったら、管理画面の [設定] -> [DNS設定] を開く。
上流のDNSサーバー: ここに
https://dns.adguard-dns.com/dns-query
https://dns10.quad9.net/dns-query
これで、外へのDNS通信が**暗号化(DoH)**され、プロバイダや公衆Wi-Fiの管理者に
覗かれなくなる。
4. [設定] -> [DNS設定] で、**「並列リクエスト」
5. ブラウザの「DNS over HTTPS を有効にする」)のチェックを外す
以上、ダッシュボードのグラフが動き出し、**「どの通信がブロックされたか」**が
リアルタイムで見えるようになる。
※アップストリームが遅い場合、管理画面の [設定] -> [DNS設定] 上流のDNSサーバーに以下を設定
1.1.1.1
8.8.8.8
9.9.9.9
https://dns.cloudflare.com/dns-query
https://dns.google/dns-query
WireGuardとの併用について
AdGuard Homeが動き出したら、WireGuardの設定ファイル内の DNS = の項目を 127.0.0.1 に書き換える。
WireGuard設定ファイル(.conf)の書き換え
WireGuardを使っている場合、設定ファイルの [Interface] セクションにある DNS 行を書き換えるのが一番確実。
[Interface]
PrivateKey = <鍵>
Address = 10.0.0.2/32
# 以下のDNSを 127.0.0.1 に書き換える(AdGuard Homeに向ける)
DNS = 127.0.0.1
wireguard併用時
ループバック(127.0.0.1)の除外設定
一部のVPNクライアントは、セキュリティのために「ローカルホスト(127.0.0.1)への通信」すら
VPNトンネル内に通そうとしてしまい、結果としてAdGuard Homeにアクセスできなくなる
(=ネットが繋がらない)ことがあるらしい。
これを防ぐには、VPNアプリの設定で 「Split Tunneling(スプリット・トンネリング)」 を
有効にし、ローカルな通信を除外設定にする必要がある。
AdGuard Home サービスの停止とアンインストール
AdGuard Home 自体には、自分自身をサービスから削除する機能が備わっている。
# サービスの停止と削除
sudo /opt/AdGuardHome/AdGuardHome -s uninstall
# インストールディレクトリを物理的に削除
sudo rm -rf /opt/AdGuardHome
これで、AdGuard Home のプログラム本体と設定ファイルは消去される。
2. システムの DNS 設定を元に戻す(重要)
もしインストール時に systemd-resolved を停止させ、/etc/resolv.conf を書き換えていた場合、
この作業を忘れるとインターネットに繋がらなくなる。
以下のコマンドで、Xubuntu 標準の DNS 挙動に戻す。
# 標準の DNS サービスを再開・有効化
sudo systemctl enable --now systemd-resolved
# 自動生成される resolv.conf へのシンボリックリンクを再作成
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
これで、OS は再びプロバイダやルーターから自動的に DNS 情報を取得する元の状態に戻る。
3. WireGuard を使っている場合の後始末
もし WireGuard の設定ファイル (.conf) 内で DNS = 127.0.0.1 と書き換えていた場合は、その行を削除するか、
元の DNS サーバー(例:8.8.8.8)に書き戻す。
まとめ:アンインストール・メモ
削除セット:
sudo /opt/AdGuardHome/AdGuardHome -s uninstall
sudo rm -rf /opt/AdGuardHome
sudo systemctl enable --now systemd-resolved
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
puppy linux のパーソナルストレージを縮小したい
1.RAM Onlyモードで起動する。
2.立ち上がったら、何もせずシャットダウン。
この時、パーソナルファイル(.4fs)を希望サイズで作成(名前が重複しない事)
3.再び、RAM Onlyモードで起動する。
4.元のパーソナルファイルと新たに作ったパーソナルファイルを両方マウントする。
5.新たに作った方の中身を全て削除。
6.元のファイルを全て新たに作った方にコピーする。
7.シャットダウンする。今度はパーソナルファイルは作成しない。
8.立ち上げるとパーソナルファイルの選択要求が有るので、新しい(縮小版)方を選択すればOK。
注)作成時、容量に注意!
bookwormpup64 viエディタの日本語化
# 1. 作業ディレクトリ作成
mkdir -p /tmp/vim_sfs
# 2. vim-tiny を取得して展開
apt-get update
apt-get download vim-tiny
dpkg-deb -x vim-tiny_*.deb /tmp/vim_sfs/
# 3. /usr/bin/vi という名前でリンクを作成(既存の /bin/vi より優先させるため)
mkdir -p /tmp/vim_sfs/usr/bin
ln -s /usr/bin/vim.tiny /tmp/vim_sfs/usr/bin/vi
# 4. SFS化
mksquashfs /tmp/vim_sfs /mnt/home/vim-tiny_portable.sfs
.bashrcでalias
alias vi='vim.tiny'
source ~/.bashrcで適用
コマンドaliasで確認
puppyのFrisbeeでwireguardを使いたい
以下は通常のインストールを行う。SFS化したいところではあるが。。。
システム基盤に関わるツールであり、SFS(読み取り専用の追加レイヤー)として扱うと、Puppy特有のレイヤー構造(AUFS/OverlayFS)による弊害が生じやすいらしい。
SFSは基本的に「静的なファイル(バイナリなど)」を供給するのに適している。しかし、resolvconf は /etc/resolv.conf という動的に書き換わるファイルを管理する。
SFS内のファイルと実環境の書き換え可能レイヤー(save file/folder)の間で競合や不整合が起き、DNS解決ができなくなるリスクがある。また、WireGuardなどのネットワークツールは、OS起動時の早い段階で読み込まれる必要がある。SFSのロードタイミングによっては、ネットワークの初期化シーケンスに間に合わず、接続の自動起動に失敗する可能性がある。
BookwormPup64でWireGuardを使うには、Frisbeeでインターネットに繋いだ状態で、
WireGuard専用のツール(wg-quick)を導入して設定するのがPuppy Linuxにおける標準的な方法。
必要なパッケージのインストール
ターミナルを開き、aptでWireGuard本体とツールをインストール。
apt update
apt install wireguard-tools
apt install resolvconf
apt install iproute2
設定ファイルの準備
VPNプロバイダーやサーバーから入手した設定ファイル(例:wireguard.conf)を、以下のディレクトリに配置。
保存先: /etc/wireguard/wireguard.conf
WireGuardの起動
以下のコマンドでVPN接続を開始。
接続前にアドレス確認
curl ifconfig.me
接続
wg-quick up wireguard(拡張子抜き)
接続確認:(latest handshake という項目に「1 minute ago」などの時間が出ていれば通信できている)
wg show
接続後のアドレス確認
curl ifconfig.me
切断
wg-quick down wireguard(拡張子抜き)
まとめ
Frisbeeは「土台となるネット接続(Wi-Fi等)」を使い、その上で wg-quick を使ってWireGuardを動かす。
bookwormpup64 パッケージのSFS化
パッケージは通常のインストールを行うとパーソナルストレージを圧迫するので、
SFS化して外部ストレージに移動させて、システム立ち上げ時にロードする。
フォントパッケージを例に。
以下で作成したSFSはパーソナルストレージ以外のストレージ(例えばUSBメモリの直下)に移動させロードすれば良い。
mkdir -p /root/font_work
cd /root/font_work
apt-get download fonts-vlgothic
mkdir -p font_sfs
dpkg-deb -x fonts-vlgothic_*.deb font_sfs
mksquashfs font_sfs fonts_vlgothic_portable.sfs -noappend -comp xz
カレントフォルダにSFSが出来上がる。
PETファイルの場合
PETファイルを右クリックして 「Extract」(展開)
dir2sfs [展開したフォルダ名]
カレントフォルダにSFSが出来上がる。
EFI起動エントリーの削除
sudo efibootmgr
このコマンドを実行すると、以下のような出力が表示(Androidの残骸)
Boot0001* ubuntu
Boot0002 * Android <===
Boot0003* Internal Hard Drive...
エントリーを削除する
sudo efibootmgr -b 0002 -B
-b 0002: 操作対象の番号を指定
-B: そのエントリーを削除(Delete)
再度 sudo efibootmgr を実行し、Androidの項目が消えていることを確認
更に
ls /boot/efi/EFI
ここに android というディレクトリがある
sudo rm -rf /boot/efi/EFI/android で削除
念の為、
sudo update-grub
zram-toolsでzramをOFFにするには?
zram-toolsでzramをOFFにするには?
zram-toolsを使用して zRAM を無効化(OFF)にするには、主に以下の3つの方法がある。
1. 一時的に停止する
現在のセッションのみで zRAM スワップを停止したい場合は、systemctl を使用。
sudo systemctl stop zramswap.service
※ これにより作成されていた /dev/zram0 などのデバイスが削除され、スワップから外れる。
2. 起動時に自動実行されないよう無効化する
PCを再起動しても zRAM が有効にならないようにするには、サービス自体を無効化する。
sudo systemctl disable zramswap.service
3. パッケージを削除する
zRAM 自体が不要な場合は、パッケージごと削除するのが最も確実。
sudo apt purge zram-tools
現在の状態を確認する方法
無効化した後に zRAM が動いていないか確認するには、以下のコマンドを使用。
zramctl: zRAM デバイスの一覧を表示。何も表示されなければ停止。
swapon --show: 現在有効なスワップ領域を表示。
補足
もし zram-config など別のツールを併用している場合は、そちらの設定も確認が必要になることがあり。
基本的には Ubuntuの公式マニュアル などにある通り、swapoff コマンドで個別に停止することも可能だが、
サービス単位(systemctl)で制御するのが最もスマート。
Tailsでデスクトップ立ち上げ時にzramを有効にする
ターミナルで永続ストレージ内に設定ファイルを置くためのディレクトリを作成
mkdir -p /live/persistence/TailsData_unlocked/dotfiles/.config/autostart
作成した.configフォルダ配下に自動起動用ファイルを作成
ファイル名:zram-start.desktop
[Desktop Entry]
Type=Application
Name=zram Setup
Exec=kgx -e "bash -c 'sudo /home/amnesia/Persistent/zram.sh; exec bash'"
Icon=utilities-terminal
Terminal=false
Categories=System;
実行権を付与
chmod +x /live/persistence/TailsData_unlocked/dotfiles/.config/autostart/zram-start.desktop
ファイラのDotfilesというブックマークが、/live/persistence/TailsData_unlocked/dotfilesに相当する。
Dotfiles = /home/amnesia のコピー元
つまり、Dotfiles配下はそのまま/home/amnesiaに反映される為、永続化できる。
/home/amnesia/Persistent/zram.sh (Persistentは永続フォルダ)
#!/bin/bash -x
# 1. zram1をリセットしてlz4、1GBで作成
sudo zramctl -r /dev/zram1 2>/dev/null
sudo zramctl -f -s 1024M -a lz4
# 2. スワップとして初期化
sudo mkswap /dev/zram1
# 3. プライオリティ200で有効化
sudo swapon -p 200 /dev/zram1
# 4. 結果を表示して確認
sudo swapon --show
sudo zramctl
カーネルの仕組み
まず、PCの電源ON→BIOSがブートローダー(GRUB)をメモリにロードし起動→ブートローダは、カーネルをロードし起動、そして。初期化され、ハードウェアを認識・設定。その後、最初のプロセス(initまたはsystemd)を起動し、
カーネル自体は、
ルートファイルシステムをマウントしてユーザー空間へ移行して、システム全体の管理を開始するブートストラッププロセス
(www.pmi-sfbac.org)が動作する。
- カーネルの初期化: 展開されたカーネルが自身をセットアップし、CPUやメモリを認識。
- ハードウェアの検出とドライバ読み込み: 必要に応じてinitramfs(初期RAMディスク)を使用してドライバを読み込み、ハードウェアへのアクセスを開始。
- ルートファイルシステムのマウント: 実際のシステムファイルが格納されているルートファイルシステム(
/)を読み書き可能モードでマウント。 - init/systemdの起動: ユーザー空間の最初のプロセスである
init(現代では主にsystemd)を起動。 - システムの管理: プロセス管理、メモリ管理、周辺機器の制御、ファイルシステム操作などの核心機能を担う「カーネル」として常駐。
一連の動作が完了すると、ログイン画面が表示され、ユーザーがシステムを利用できる状態になる。
で、その後。カーネルを呼び出すのは誰か? ユーザープログラム(アプリ): ブラウザやエディタ、C言語のプログラムなどです。これらは「システムコール」という 専用の窓口を通じて、カーネルに「ファイルを保存して」「ネットに繋いで」等と依頼。 ハードウェア: キーボードが押された、ネットワークカードにデータが届いた、といった物理的なイベントによる。 これらは「割込み(Interrupt)」という信号でカーネルに対し即座に処理を要求。 カーネル自身(カーネルスレッド): ユーザーから頼まれなくても、裏でこっそり掃除(メモリ解放)をしたり、 ディスクへの書き込みタイミングを計ったりしている「公務員」のようなプログラムたち。 CPUには、安全のために**「モード(特権レベル)」**という概念がある。 ユーザーモード (User Mode): 普通のアプリが動く場所。直接ハードウェアを触ることは許されない。 カーネルモード (Kernel Mode): カーネルが動く全知全能の場所。メモリの全域やハードウェアに直接アクセス可能。 アプリがシステムコールを発行した瞬間に、CPUのモードが「ユーザー」から「カーネル」へ切り替わる。 この**境界線(コンテキストスイッチ)**こそが、カーネルが呼ばれる場所。 以下呼び出しのルート システムコール:アプリが「窓口(番号)」を指定して呼び出す:open(), read(), write() トラップ(例外):プログラムが「ゼロ除算」などのミスをした時に、カーネルが強制介入する。 セグメンテーション違反 割り込み:ハードウェアが電気信号を送って実行中の処理を一時中断させる:マウスの移動、タイマー割り込み 今動いているシステムコールを統計的に表示してみる $ sudo strace -cw ls [sudo] hoge のパスワード: ダウンロード テンプレート デスクトップ ドキュメント ビデオ ピクチャ ミュージック 公開 % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 18.80 0.001167 41 28 mmap 17.41 0.001081 37 29 write 14.20 0.000882 32 27 9 openat 13.91 0.000863 863 1 execve 8.92 0.000554 27 20 close 8.25 0.000512 26 19 fstat 3.59 0.000223 44 5 mprotect 3.38 0.000210 29 7 read 2.66 0.000165 82 2 getdents64 1.30 0.000081 26 3 brk 1.16 0.000072 36 2 2 statfs 1.00 0.000062 62 1 munmap 1.00 0.000062 31 2 2 access 0.88 0.000055 27 2 ioctl 0.79 0.000049 24 2 pread64 0.42 0.000026 25 1 getrandom 0.40 0.000025 24 1 futex 0.40 0.000025 24 1 prlimit64 0.39 0.000024 23 1 rseq 0.38 0.000024 23 1 set_tid_address 0.38 0.000024 23 1 arch_prctl 0.38 0.000023 23 1 set_robust_list ------ ----------- ----------- --------- --------- ---------------- 100.00 0.006209 39 157 13 total ls という単純なコマンド一つでも、裏側で何十回もカーネルが呼ばれているのが見える 1. カーネルへの入り口:システムコールの旅 ・普段使う printf() や open() といった関数は、実は「カーネルへの紹介状」のようなもの ・ライブラリ呼び出し: ユーザーのCプログラムが read() を呼ぶ ・トラップ発生: CPUが特殊な命令(syscall 命令など)を実行し、実行権限を「ユーザーモード」から 「カーネルモード」へ切り替える ・エントリポイント: arch/x86/entry/ あたりにある共通の窓口に到着する ・システムコール・テーブル: 番号(例:read は 0番)を見て、対応するカーネル内の関数(ksys_read など) へジャンプする 2. ソースコードで「窓口」を見てみる カーネル内部の関数名は、多くの場合 sys_ や ksys_ という接頭辞がついている。 例えば、ファイルを開く open システムコールの実体を探すなら、ソース全体をこう検索してみると面白い。 $ grep -r "SYSCALL_DEFINE3(open" fs/open.c SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode) COMPAT_SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode) ※ SYSCALL_DEFINE というマクロで定義されているのが、システムコールの「正体」 3. 「誰が」をリアルタイムで監視する:top と ps の裏側 ps コマンドを叩いた時、ずらっと並ぶプロセスの中で、カーネル自身が動かしている 「裏方(カーネルスレッド)」を見分ける方法がある。 $ ps -ef | head -n 20 UID PID PPID C STIME TTY TIME CMD root 1 0 0 14:29 ? 00:00:02 /sbin/init nosplash root 2 0 0 14:29 ? 00:00:00 [kthreadd] root 3 2 0 14:29 ? 00:00:00 [pool_workqueue_release] root 4 2 0 14:29 ? 00:00:00 [kworker/R-rcu_g] root 5 2 0 14:29 ? 00:00:00 [kworker/R-rcu_p] root 6 2 0 14:29 ? 00:00:00 [kworker/R-slub_] root 7 2 0 14:29 ? 00:00:00 [kworker/R-netns] root 9 2 0 14:29 ? 00:00:00 [kworker/0:0H-events_highpri] root 10 2 0 14:29 ? 00:00:01 [kworker/0:1-events] root 12 2 0 14:29 ? 00:00:00 [kworker/R-mm_pe] root 13 2 0 14:29 ? 00:00:00 [rcu_tasks_kthread] root 14 2 0 14:29 ? 00:00:00 [rcu_tasks_rude_kthread] root 15 2 0 14:29 ? 00:00:00 [rcu_tasks_trace_kthread] root 16 2 0 14:29 ? 00:00:00 [ksoftirqd/0] root 17 2 0 14:29 ? 00:00:03 [rcu_preempt] root 18 2 0 14:29 ? 00:00:00 [migration/0] root 19 2 0 14:29 ? 00:00:00 [idle_inject/0] root 20 2 0 14:29 ? 00:00:00 [cpuhp/0] root 21 2 0 14:29 ? 00:00:00 [cpuhp/1] 名前が [ ] で囲まれているもの: (例:[kthreadd], [kworker/uX:X])これらはユーザーモードには存在せず、 最初から最後までカーネルモードの中で生きているプロセス これらを作成・管理する仕組みの基礎も、start_kernel から派生して作られている。 今度は**「特定のプロセスが、今どのカーネル関数を呼び待機しているか」**を直接覗く。 $ sudo cat /proc/self/stack [sudo] hoge のパスワード: [<0>] proc_pid_stack+0xed/0x170 [<0>] proc_single_show+0x53/0xe0 [<0>] seq_read_iter+0x12f/0x4b0 [<0>] seq_read+0x11c/0x160 [<0>] vfs_read+0xb1/0x3a0 [<0>] ksys_read+0x73/0x100 [<0>] __x64_sys_read+0x19/0x30 [<0>] x64_sys_call+0x2254/0x25c0 [<0>] do_syscall_64+0x7f/0x180 [<0>] entry_SYSCALL_64_after_hwframe+0x78/0x80 これを実行すると、今 cat コマンドを実行しているプロセスが、カーネル内のどの関数(スタック) を通っているかがリアルタイムで表示される。 readに関して $ grep -rn "sys_read" . grep: ./syscall_64.o: binary file matches ./syscalls/syscall_32.tbl:17:3 i386 read sys_read <=== syscallテーブルの3番め ./syscalls/syscall_32.tbl:99:85 i386 readlink sys_readlink ./syscalls/syscall_32.tbl:159:145 i386 readv sys_readv ./syscalls/syscall_32.tbl:319:305 i386 readlinkat sys_readlinkat ./syscalls/syscall_64.tbl:11:0 common read sys_read ./syscalls/syscall_64.tbl:30:19 64 readv sys_readv ./syscalls/syscall_64.tbl:100:89 common readlink sys_readlink ./syscalls/syscall_64.tbl:198:187 common readahead sys_readahead ./syscalls/syscall_64.tbl:278:267 common readlinkat sys_readlinkat ./syscalls/syscall_64.tbl:396:515 x32 readv sys_readv では、sys_readの本体は? 「.tbl(テーブル)」ファイルはあくまで「この番号はこの関数に飛ばす」という名簿に過ぎない。 肝心の実体(中身)が見当たらないのは、カーネル特有の「マクロ」という魔法で定義が隠されているから。 sys_read の実体は fs/read_write.c というファイルの中。 カーネルでは、セキュリティや引数のチェックを共通化するために、関数を直接 void sys_read(...) とは書かず、 SYSCALL_DEFINE というマクロを使って定義する。 linux-6.8.0 のトップディレクトリで $ grep -rn "SYSCALL_DEFINE3(read," fs/ fs/read_write.c:627:SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) 以下が本体。 SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) { return ksys_read(fd, buf, count); } ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count) { struct fd f = fdget_pos(fd); ssize_t ret = -EBADF; if (f.file) { loff_t pos, *ppos = file_ppos(f.file); if (ppos) { pos = *ppos; ppos = &pos; } ret = vfs_read(f.file, buf, count, ppos); if (ret >= 0 && ppos) f.file->f_pos = pos; fdput_pos(f); } return ret; } SYSCALL_DEFINE3: 「引数が 3つ あるシステムコールの定義」という意味 read: システムコールの名前 このマクロがコンパイル時に展開されて、名簿(.tbl)で見た sys_read という関数名に化ける仕組み SYSCALL_DEFINE3(read, ...): ユーザー空間からの引数チェック ksys_read(): カーネル内部用の共通処理 vfs_read(): 「仮想ファイルシステム(VFS)」層。ここで「どのファイルシステム (ext4かな?ネットワークかな?)」を判断する。 「名簿(.tbl)」→「マクロ(SYSCALL_DEFINE)」→「共通処理(vfs_)」という流れが見えてくると、 巨大なソースコードが急に整理されて見えてくる。 $ find . -name "*.h" | xargs grep -n "SYSCALL_DEFINE" ./include/linux/syscalls.h:223:#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) ./include/linux/syscalls.h:224:#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) ./include/linux/syscalls.h:225:#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) ... ./include/linux/syscalls.h:232:#define SYSCALL_DEFINEx(x, sname, ...) \ ./include/linux/syscalls.h:234: __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) このコードが教えてくれる「カーネルの仕組み」 この複雑なマクロ(## を使った連結など)が何をしているかというと、主に3つの仕事を自動化している 名前の自動生成: read という名前に __x64_sys_ などの接頭辞を付けて、正式な関数名に変換する 引数の保護: ユーザー空間から渡されたデタラメな値でカーネルがクラッシュしないよう、型チェックや 安全な取り込み(ラッパー)を通す セキュリティ(ASLR対策など): 実行時にアドレスが特定されにくいような工夫を、すべてのシステムコールに 一律で適用する
高速ダウンローダー aria2c
サーバーに負担がかかるので、自己責任で。
sudo apt update
sudo apt install aria2
aria2c -x 16 -s 16 -o hogehoge.iso "https://hogehoge"
-x (max-connection-per-server): 1つのサーバーに対する最大接続数。デフォルトは1、推奨は16程度。
-s (split): 1つのファイルを分割してダウンロードする数。デフォルトは5、高速化のために16〜32程度を設定。
-d (dir): ファイルの保存先ディレクトリを指定する。
-o (out): ダウンロード時のファイル名を指定する。
-c (continue): ダウンロードの中断・再開(レジューム)を行う。
使用例:
aria2c -x 16 -s 16 -c -d /path/to/dir "http://example.com/file.zip"
(16接続、16分割、レジューム有効でダウンロード)
レジュームの詳細
-c(--continue)オプションを指定した時の具体的な動作(オペレーション)
1. 中断時の動き (Ctrl + C)
コントロールファイルの作成: 中断した瞬間、ダウンロード中のフォルダに .aria2 という拡張子の小さなファイル(例: file.zip.aria2)が自動保存される。
進捗の記録: このファイルには「どの部分までダウンロードが終わっているか」という情報が正確に記録される。
データ保護: すでにダウンロード済みのデータ本体(file.zip など)は消されずにそのまま残る。
2. 再開時の動き (同じコマンドを実行)
中断後に再び -c を付けて同じコマンドを実行すると、以下の流れで再開される。
照合: aria2c がカレントディレクトリにある .aria2 ファイルを探し出す。
スキップ: すでに取得済みのデータブロックをスキップし、未取得の続きからダウンロードを開始する。
完了後の削除: ダウンロードが100%完了すると、役割を終えた .aria2 ファイルは自動的に削除される。
⚠️ 注意点
-c を忘れない: 再開時に -c を付け忘れると、サーバーによっては「ファイルが既に存在する」というエラーが出るか、あるいは上書き(最初からやり直し)になろうとして停止。
サーバー側の対応: ほとんどのサーバーは対応しているが、稀に「レジューム(再開)」を許可していないサーバーでは -c を使っても最初からになることもある。
セッション保存: 大量のファイルを一度に扱っている場合は、--save-session オプションを使って中断時のリスト全体を保存しておくと、次回起動時に一括で再開できてさらに便利。
最後に注意事項:マナー的オプション
--max-connection-per-server (-x),1サーバーあたりの最大接続数,
「5〜16程度に留め、サーバーの規約を守りましょう」
--split (-s),分割数,
「接続数と同じか、それ以下に設定しましょう」
--max-download-limit,速度制限,
「他の作業の邪魔にならないよう、速度を絞るのもマナーです」
注)まずはデフォルト(あるいは控えめな数値)で試しましょう。
「ダウンロード先のサイトの利用規約を確認しましょう」
xterm 設定方法
1. 恒久的な設定(~/.Xresources)
フォントや色の設定を保存するには、ホームディレクトリに設定ファイルを作成・編集する。
ターミナルで vi ~/.Xresources を実行し、以下の設定例を記述。
! フォントとサイズの設定
xterm*faceName: Monospace:size=12
! 背景色と文字色
xterm*background: black
xterm*foreground: white
! スクロールバーの有効化
xterm*scrollBar: true
! 保存する行数を指定(例:10,000行)
xterm*saveLines: 10000
! 横80文字、縦40行で起動
xterm*geometry: 80x40
などなど。
設定の反映
xrdb -merge ~/.Xresources
2. 一時的な設定(ポップアップメニュー)
起動中にすばやく設定を変更したい場合は、キーボードとマウスの組み合わせを使用。
Ctrl + 左クリック: メインオプション(リセット、終了など)
Ctrl + 中クリック: VTオプション(スクロールバーの切り替えなど)
Ctrl + 右クリック: フォントサイズの変更