Skip to content

Instantly share code, notes, and snippets.

@bokuo-okubo
Last active August 15, 2025 10:10
Show Gist options
  • Select an option

  • Save bokuo-okubo/afc3ebc42a0b6d4cfce0746d342ca6d3 to your computer and use it in GitHub Desktop.

Select an option

Save bokuo-okubo/afc3ebc42a0b6d4cfce0746d342ca6d3 to your computer and use it in GitHub Desktop.
fx13-ubuntu24-setup.sh
#!/usr/bin/env bash
# Flow X13 (2021, GV301) on Ubuntu Server 24.04 → 安定GUI環境化スクリプト
# - HWE kernel / firmware 更新
# - NVIDIA プロプライエタリ導入(nouveau無効化)
# - 最小デスクトップ(ubuntu-desktop-minimal)
# - iGPU優先運用(発熱低減)
# - 省電力チューニング(powertop --auto-tune 常時化)
# - 任意: ASUS asusctl/supergfxctl(BUILD_ASUS_TOOLS=1でビルド導入)
set -euo pipefail
# ===== 設定可能オプション =====
: "${INSTALL_GUI:=1}" # 1: 最小GNOMEを入れる, 0: ヘッドレスのまま
: "${SET_IGPU_MODE:=1}" # 1: iGPU優先運用に切替(prime-select/intel)
: "${BUILD_ASUS_TOOLS:=0}" # 1: asusctl/supergfxctl をビルド導入(任意)
: "${USERNAME:=}" # 非rootユーザー名(空なら現在のログインユーザーを推定)
: "${LOG:=/var/log/fx13-setup.log}"
STATE_FILE=/var/local/fx13_setup_state
exec > >(tee -a "$LOG") 2>&1
if [[ -z "${USERNAME}" ]]; then
# ログインユーザー推定(sudoで動かす前提)
USERNAME="${SUDO_USER:-${USER:-ubuntu}}"
fi
echo "==> Flow X13 セットアップ開始 (user=${USERNAME})"
echo "==> ログ: $LOG"
echo "==> オプション: INSTALL_GUI=$INSTALL_GUI, SET_IGPU_MODE=$SET_IGPU_MODE, BUILD_ASUS_TOOLS=$BUILD_ASUS_TOOLS"
echo
stage() {
echo "$1" | sudo tee "$STATE_FILE" >/dev/null
}
current_stage() {
[[ -f "$STATE_FILE" ]] && cat "$STATE_FILE" || echo "0"
}
need_reboot=false
STAGE="$(current_stage)"
# --- ステージ1: 基本更新・HWE/firmware ---
if [[ "$STAGE" -lt 1 ]]; then
echo "== [1/6] 基本更新・HWEカーネル・linux-firmware を導入"
sudo DEBIAN_FRONTEND=noninteractive apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get -y full-upgrade
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y linux-generic-hwe-24.04 linux-firmware \
ubuntu-drivers-common curl ca-certificates
stage 1
need_reboot=true
fi
# --- ステージ2: nouveau 無効化(NVIDIA前提準備) ---
if [[ "$STAGE" -lt 2 ]]; then
echo "== [2/6] nouveau を無効化(NVIDIA利用を前提とするため)"
sudo bash -c 'cat >/etc/modprobe.d/blacklist-nouveau.conf <<EOF
blacklist nouveau
options nouveau modeset=0
EOF'
sudo update-initramfs -u
stage 2
need_reboot=true
fi
# --- ステージ3: NVIDIA ドライバ導入 ---
if [[ "$STAGE" -lt 3 ]]; then
echo "== [3/6] NVIDIA 推奨ドライバを導入(要: Secure Boot 無効 or MOK enroll)"
# 推奨版自動選択
sudo ubuntu-drivers autoinstall || true
# 代表的に使用率の高い 535/550 系に固定したいなら(例):
# sudo apt-get install -y nvidia-driver-550
stage 3
need_reboot=true
fi
# 再起動要求があればここで1回
if $need_reboot; then
echo "== 再起動します。復帰後に: sudo bash $(basename "$0") をもう一度実行してください。"
need_reboot=false
sleep 2
sudo systemctl reboot
exit 0
fi
# --- ステージ4: 最小デスクトップ導入(任意) ---
if [[ "$STAGE" -lt 4 ]]; then
if [[ "$INSTALL_GUI" -eq 1 ]]; then
echo "== [4/6] 最小デスクトップ(ubuntu-desktop-minimal) を導入"
sudo DEBIAN_FRONTEND=noninteractive apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ubuntu-desktop-minimal gnome-software-plugin-flatpak
# 日本語入力など必要に応じて:
# sudo apt-get install -y language-pack-ja ibus-mozc fonts-noto-cjk
else
echo "== [4/6] GUI導入をスキップ (INSTALL_GUI=0)"
fi
stage 4
fi
# --- ステージ5: iGPU優先(発熱低減) ---
if [[ "$STAGE" -lt 5 ]]; then
if [[ "$SET_IGPU_MODE" -eq 1 ]]; then
echo "== [5/6] iGPU優先に設定(prime-select intel)"
if command -v prime-select >/dev/null 2>&1; then
sudo prime-select intel || true
else
# デスクトップ未導入でも、後でprime-selectが入れば反映可能
echo "prime-select 未検出。GUI導入後に 'sudo prime-select intel' を実行してください。"
fi
else
echo "== [5/6] iGPU優先設定をスキップ (SET_IGPU_MODE=0)"
fi
stage 5
need_reboot=true
fi
# --- ステージ6: 省電力チューニング + 任意 asusctl/supergfxctl ---
if [[ "$STAGE" -lt 6 ]]; then
echo "== [6/6] 省電力チューニング(powertop)と任意の ASUS ツール導入"
sudo DEBIAN_FRONTEND=noninteractive apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y powertop
# powertop --auto-tune を起動時に自動適用する systemd サービス
sudo bash -c 'cat >/etc/systemd/system/powertop-autotune.service <<EOF
[Unit]
Description=Powertop auto tune
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/powertop --auto-tune
[Install]
WantedBy=multi-user.target
EOF'
sudo systemctl enable powertop-autotune.service
if [[ "$BUILD_ASUS_TOOLS" -eq 1 ]]; then
echo "== ASUS ツール (supergfxctl / asusctl) をビルド導入します"
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \
git build-essential pkg-config cargo libclang-dev libudev-dev
work=/tmp/asus-linux-build
sudo rm -rf "$work" && mkdir -p "$work"
pushd "$work" >/dev/null
# supergfxctl
git clone https://gitlab.com/asus-linux/supergfxctl.git
pushd supergfxctl >/dev/null
make
sudo make install
sudo systemctl enable --now supergfxd || true
popd >/dev/null
# asusctl
git clone https://gitlab.com/asus-linux/asusctl.git
pushd asusctl >/dev/null
make
sudo make install
sudo systemctl enable --now asusd || true
popd >/dev/null
popd >/dev/null
echo "== supergfxctl 例: 'sudo supergfxctl --mode integrated' / 'sudo supergfxctl --status'"
else
echo "== ASUS ツールのビルドはスキップ (BUILD_ASUS_TOOLS=0)"
fi
stage 6
fi
echo
echo "✅ セットアップ完了! 推奨チェック:"
echo " - kernel: uname -r # 6.8 など HWE 系か"
echo " - NVIDIA 認識: nvidia-smi # ドライバがロードされるか"
echo " - PRIME 設定: prime-select query # intel になっているか"
echo " - 消費電力: sudo powertop --time=10s # Idle W を確認"
echo " - ASUS(任意): supergfxctl --status # 導入した場合"
echo
echo "※ iGPU優先を解除して dGPU を使いたいとき:"
echo " sudo prime-select nvidia # 再起動後に dGPU 利用"
echo " (supergfxctl を使う場合は競合に注意。どちらか一方で運用してください)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment