低スペック PC 活用ノウハウ
Linux Mint (Cinnamon) の使い方 その-33
Chrome ページを復元しますか?
Chrome は正しく終了しませんでした。
Linux Mint (Cinnamon) の使い方 その-33
Chrome ページを復元しますか?
Chrome は正しく終了しませんでした。
Linux Mint で Chrome を開いたままシャットダウンし、その後電源を入れると、
🔹 ページを復元しますか?
🔹 Chrome は正しく終了しませんでした。
というメッセージが、毎回表示される。
🔹 ページを復元しますか?
🔹 Chrome は正しく終了しませんでした。
というメッセージが、毎回表示される。
以下、この解決策を記録。
スポンサー リンク
目 次
1. Chrome が正しく終了しない原因
Linux Mint をシャットダウンする際に、Chrome が閉じられる前に電源が落ちて、Chrome が「正常に終了」できなかったと判断し、このメッセージが出力される。
Linux Mint(Cinnamon)はログアウト時やシャットダウン時にアプリを強制終了することが多く、その際に 「正しく終了した」 というフラグが残らないことがある。
原因:Chrome が強制終了させられる。
2. 方法-1:Chrome の設定で対処する
✅ 方法-1: 「前回のセッションを復元する」設定を使う。
これで、メッセージが出ても自動で復元されるので、実質的に気にならなくなる。
但し、「特定のページまたはページセットを開く」の設定が使えなくなる。
3. 方法-2:Chrome をコマンドで終了させる
✅ 方法-2: Chrome に「終了シグナル」を送る。
🔹 シャットダウン時に「 pkill -15 chrome 」コマンドを自動実行して、Chrome に『ちゃんと閉じた』記録を残させる。
🔹 「/lib/systemd/system-shutdown/」は、
Linuxの systemd がシステムシャットダウン時に実行するシャットダウン用のカスタムシェルスクリプト(ユニット)を配置するためのディレクトリです。
Linuxの systemd がシステムシャットダウン時に実行するシャットダウン用のカスタムシェルスクリプト(ユニット)を配置するためのディレクトリです。
🔹 ここに、コマンドを実行するスクリプトを配置しておけば、シャットダウンする前に実行され、特定の処理(ネットワークの切断、サービスの終了など)を自動化することが出来る。
🔹 pkill コマンド:pkill [シグナル] プロセス名。
-15:終了。
-9:強制終了。
-15:終了。
-9:強制終了。
コマンドを実行するスクリプトを作成。
sudo nano /lib/systemd/system-shutdown/chrome-clean-exit.sh
次の内容を記述する。
#!/bin/sh
# Chrome をシャットダウン時に正しく終了させるスクリプト
case "$1" in
halt|poweroff|reboot)
# SIGTERM (15) を送って Chrome に正常終了させる
pkill -15 chrome
# 少し待ってから強制終了(念のため)
sleep 2
pkill -9 chrome
;;
esac
実行権限を付与する。
sudo chmod +x /lib/systemd/system-shutdown/chrome-clean-exit.sh
✅ 仕組みの説明
• /lib/systemd/system-shutdown/ 以下のスクリプトは、シャットダウン時に自動で実行される。
• halt|poweroff|reboot の場合だけ処理するようにしているので安全。
• pkill -15 chrome → SIGTERM(優しく終了要求)
• sleep 2 の後に pkill -9 chrome → まだ残っている場合は強制終了。
• /lib/systemd/system-shutdown/ 以下のスクリプトは、シャットダウン時に自動で実行される。
• halt|poweroff|reboot の場合だけ処理するようにしているので安全。
• pkill -15 chrome → SIGTERM(優しく終了要求)
• sleep 2 の後に pkill -9 chrome → まだ残っている場合は強制終了。
✅ 効果
これでシャットダウン時に Chrome が「正しく閉じられた」と記録されるので、
次回の起動時に「Chrome は正しく終了しませんでした」のメッセージは出なくなり、
代わりに 前回のタブがそのまま開く 挙動になる。
これでシャットダウン時に Chrome が「正しく閉じられた」と記録されるので、
次回の起動時に「Chrome は正しく終了しませんでした」のメッセージは出なくなり、
代わりに 前回のタブがそのまま開く 挙動になる。
📌 ポイント:「sleep 2」 ← 待ち時間の値を調整する。
①.シャットダウンと再起動で設定すべき値が異なる。
→ 再起動用に長めにする。
②.同時に開いている他の処理にも依存する。
①.シャットダウンと再起動で設定すべき値が異なる。
→ 再起動用に長めにする。
②.同時に開いている他の処理にも依存する。
③.アップデートをインストール後の再起動には、長めの待ち時間が必要。
④.稼働しているマシンのスペックで待ち時間が異なる。
例:シャットダウン「sleep 2」 でOK。再起動では「sleep 30」 が必要。
課題:シャットダウンと再起動での動作が異なり、
「sleep nn」 ← 待ち時間の値を調整するだけでは解決しない。
「sleep nn」 ← 待ち時間の値を調整するだけでは解決しない。
4. Chrome をコマンドで終了させる問題点と対策
⚡ 理由:「systemd のシャットダウン処理の順序が関係し、Chrome が「正常終了のフラグを書き込む」ための環境が残っていない」。
🔹 /lib/systemd/system-shutdown/ のスクリプトは、
「すでにほとんどのユーザーサービスが停止した後」に実行される。
「すでにほとんどのユーザーサービスが停止した後」に実行される。
🔹 この時点では ユーザーのプロセスや DBus、X11 セッションなどが止まっていることが多く、pkill -15 chrome が効いても Chrome が「正常終了のフラグを書き込む」ための環境が残っていない。
🔹 そのため、シャットダウンでは Chrome が最後の状態を記録できず、次回起動時に『正しく終了しなかった』と表示される事になる。
🔹 一方、再起動のときはプロセス停止が少し緩やかで、Chrome がまだ動ける間にフラグを書き込めたのでうまくいく場合がある。
🔧 対策:これを解決するには「systemd のシャットダウン段階」ではなく、ユーザーセッションが閉じられる直前で Chrome を終了させる必要がある。
🔹 systemd ユーザーサービスで管理する:
Chrome をユーザーサービスとして扱い、終了処理に ExecStop を書いておく方法。
Chrome をユーザーサービスとして扱い、終了処理に ExecStop を書いておく方法。
🔹 これなら ログアウト/シャットダウン/再起動の全てで安全に終了処理が走る。
📌 前記の system-shutdown スクリプトは削除しておく
sudo rm /lib/systemd/system-shutdown/chrome-clean-exit.sh
sudo rm /lib/systemd/system-shutdown/chrome-clean-exit.sh
5. 方法-3:systemdのユーザーサービスを使う
systemd ユーザーサービスで Chrome の終了処理をシステム化する
①. ユニットファイルの作成。
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/chrome-cleanexit.service
nano ~/.config/systemd/user/chrome-cleanexit.service
②. 中身を記述。
[Unit]
Description=Ensure Chrome exits cleanly on logout/shutdown/reboot
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
After=graphical-session.target
[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/usr/bin/pkill -u $USER -15 chrome
ExecStopPost=/bin/sleep 5
ExecStopPost=/usr/bin/pkill -u $USER -9 chrome
RemainAfterExit=yes
[Install]
WantedBy=graphical-session.target
📌 ユニット設定のポイント。
• Before=shutdown.target reboot.target halt.target:システムのシャットダウンやリブート時に確実に動作するように設定。
• After=graphical-session.target:Chrome は通常、グラフィカルセッション内で動作するため、グラフィカルセッションが開始した後にサービスが準備されるようにする。
• WantedBy=graphical-session.target:サービスをグラフィカルセッションに紐づけることで、セッションのライフサイクルに合わせて動作する。
• pkill -u $USER:pkill chrome では、システム全体の chrome プロセスを対象にしてしまう可能性があり、-u $USER を追加することで、現在のユーザーのプロセスだけを対象にします。これにより、pkill のエラーを回避できる可能性がある。
• RemainAfterExit=yes:Type=oneshot のサービスでは、ExecStart が終了した後もサービスが「アクティブ」と見なされるようにします。
③. 読み込みと有効化。
systemctl --user daemon-reload
systemctl --user enable chrome-cleanexit.service
systemctl --user enable chrome-cleanexit.service
④. サービスを再起動。
systemctl --user restart chrome-cleanexit.service
⑤. サービスが正しく動作しているか確認。
systemctl --user status chrome-cleanexit.service
🎯 これで ログイン時にサービスが登録され、
🔹 ログアウト
🔹 シャットダウン
🔹 再起動
のときに自動的に Chrome を終了処理してくれる。
🔹 ログアウト
🔹 シャットダウン
🔹 再起動
のときに自動的に Chrome を終了処理してくれる。
⑥. 動作確認。
Chrome を起動したまま「電源オフ」や「再起動」を実行。
次回起動時に「Chrome は正しく終了しませんでした」が出ず、前回のタブがそのまま復元されれば成功です。
Chrome を起動したまま「電源オフ」や「再起動」を実行。
次回起動時に「Chrome は正しく終了しませんでした」が出ず、前回のタブがそのまま復元されれば成功です。
✨ ポイント
🔹 強制終了 (pkill -9) まで入れているので、電源断に近い状態でもタブの復元が安定します。
🔹 待ち時間 (sleep 5) は必要に応じて調整が必要です。
🔹 強制終了 (pkill -9) まで入れているので、電源断に近い状態でもタブの復元が安定します。
🔹 待ち時間 (sleep 5) は必要に応じて調整が必要です。
👉 これで「シャットダウン」「再起動」両方とも安定する。
👉 また、「自動起動は従来通り」で「終了だけ systemd」という目的と両立できる。
6. systemd と ユニット について
✅ systemd は Linux システムの「起動処理」を担う仕組みです。
ブート時に最初に起動するプロセス(PID 1)として動き、サービスの起動順序や依存関係、プロセスの監視(再起動)、ログ(journal)、リソース管理(cgroup)などをまとめて扱います。
ブート時に最初に起動するプロセス(PID 1)として動き、サービスの起動順序や依存関係、プロセスの監視(再起動)、ログ(journal)、リソース管理(cgroup)などをまとめて扱います。
✅ ユニット(unit)は、systemd が管理する「もの」の単位で、サービスやマウントポイント、タイマーなどの種類があります。
🔹 ユニットは、ユニットファイルで定義し、ユニットファイルの拡張子(*.service や *.mount、*.timer など)でユニットの種類が判断されます。
🔹 ユニットは、[Unit]、[Service]、[Install]などのセクションがあり、サービスの動作、依存関係、有効化方法などを定義します。
✅ ユーザーサービスは、各ユーザー用の systemd インスタンスで、ユーザー権限で動くサービスです。
🔹 systemctl --user で操作します。
🔹 ユーザーのホームディレクトリ内にある $HOME/.config/systemd/user/ ディレクトリにユニットファイルを配置します。
以上。
(2025.09.24)
スポンサー リンク