Skip to content
B-log
Go back

CachyOS(Arch系)で一時的にスリープを禁止する方法|ダブルクリックで使えるようにしてみた

はじめに

PCで作業をしているとき、ちょっと席を離れたり、時間のかかる処理を実行したりすることがあります。

そんなときに困るのが、PCが自動的にスリープしてしまうこと。

もちろん、電源設定からスリープまでの時間を変更することもできますが、一時的にスリープを防ぎたいだけなら、わざわざ設定を変更するのも面倒です。

そこで今回は、CachyOSで一時的にスリープを禁止する方法を紹介します。

さらに、毎回コマンドを入力するのも面倒なので、WindowsのBATファイルのように、ダブルクリックするだけで実行できるようにしてみました。

今回の環境は以下のとおりです。

systemd-inhibit はsystemdの機能なので、systemdを使っているLinuxなら、CachyOS以外のArch Linuxなどでも同じ方法が使えます。

ターミナルに貼るコマンドは、Fishで動く書き方にしています。シェルスクリプトの中身は、1行目の #!/bin/bash でbashとして実行されるので、Fishのままで問題ありません。

KDE Plasmaの標準機能との違い

実は、KDE Plasmaの電源ウィジェット(バッテリーや電源のアイコン)にも、「手動でスリープと画面ロックを無効化」というチェックボックスがあります。チェックを入れると、スリープと画面ロックを止められます。

ただし、チェックを外すまで無期限で、時間は指定できません。

今回の方法は、コマンドで秒数を指定すれば、時間が来たら自動で解除されます。また、ダブルクリックで起動できるようにもなります。

なお、どちらの方法も、使っている間は画面が自動でロックされなくなる点は同じです。席を離れるときは注意してください(詳しくは後述します)。

systemd-inhibitで一時的にスリープを禁止する

CachyOSでは、systemd-inhibit というコマンドを使うことで、一時的にシステムのスリープを禁止できます。

実行するコマンドはこちら。

systemd-inhibit --what=idle:sleep --mode=block sleep infinity

これだけです。

コマンドを実行すると、スリープを禁止するロックが取得されます。

コマンドの意味

それぞれの指定には、以下のような意味があります。

指定意味
systemd-inhibitスリープなどを抑制するロックを取得する
--what=idle:sleep放置による自動スリープ(idle)と、スリープ(sleep)の両方を対象にする
--mode=block対象の操作をブロックする
sleep infinity無期限に待機する

systemd-inhibit は、指定したプログラムの実行中だけロックを保持します。

今回は sleep infinity で無期限に待機させているため、コマンドを終了するまでスリープが禁止される仕組みです。

--what に idle を含めるかどうかで、画面の挙動が変わります。詳しくは後述します。

スリープ禁止を解除する方法

解除方法は簡単です。

ターミナルで Ctrl + C を押すだけ。

実行中のコマンドが終了し、スリープ禁止も解除されます。

また、ターミナルのウィンドウを閉じても解除できます。

時間を指定してスリープを禁止する

sleep infinity を秒数に変えると、時間限定にできます。

systemd-inhibit --what=idle:sleep --mode=block sleep 3600

sleep 3600 は3,600秒(1時間)待機して終了します。終了と同時にロックも解除されるので、解除し忘れを防げます。

スリープ禁止の状態を確認する

現在、スリープ禁止が有効になっているか確認したい場合は、別のターミナルを開いて以下を実行します。

systemd-inhibit --list

現在取得されているロックの一覧が表示されます。

実行中の sleep infinity によるロックが表示されていれば、スリープ禁止が有効になっています。

現在取得されているロックの一覧

—whatの指定で、画面の挙動が変わる

--what= に何を指定するかで、画面の暗転とスクリーンロックの挙動が変わりました。私の環境(デスクトップPC)で確認した結果です。ロックと画面の暗転が1分で起きるように設定し、2分以上待って確認しました。

指定画面の暗転スクリーンロック
なし(ロックを取得しない)1分後に起きる1分後に起きる
--what=idle:sleep起きない起きない
--what=sleep1分後に起きる1分後に起きる

--what=idle:sleep のときは、実行中の間は暗転もロックも起きず、コマンドが終了した直後に起きました。

idle は「放置している」という判定を止めるため、画面の暗転とロックも止まると考えられます。使い分けは、次のとおりです。

--what=sleep だけで、自動スリープまで止まるかは、ご自身の環境で確認してください。また、デスクトップPCかノートPCか、電源設定などによって、結果が変わる可能性があります。

シェルスクリプトにしてファイル化する

毎回コマンドを入力するのは面倒なので、コマンドをファイルにまとめてしまいます。

Linuxでは、WindowsのBATファイルに近いものとして、シェルスクリプト(.sh)を利用できます。

1. シェルスクリプトを作成する

まず、ホームディレクトリに Applications というフォルダを作成します。

mkdir -p ~/Applications

その中に no-sleep.sh というファイルを作成します。

#!/bin/bash

echo "================================"
echo " No Sleep : スリープ禁止中"
echo "================================"
echo ""
echo "解除するには Ctrl+C を押してください。"
echo ""

systemd-inhibit \
  --what=idle:sleep \
  --mode=block \
  --who="No Sleep" \
  --why="Temporary No Sleep" \
  sleep infinity

2. 実行権限を付与する

作成したシェルスクリプトに実行権限を付与します。

chmod +x ~/Applications/no-sleep.sh

これで、シェルスクリプトを実行できるようになりました。

ターミナルから実行する場合は、以下のコマンドを入力します。

~/Applications/no-sleep.sh

これだけでスリープ禁止が有効になります。

KDE Plasmaでダブルクリックから実行できるようにする

せっかくファイル化したので、さらに使いやすくしてみます。

KDE Plasmaでは、.desktop というファイルを作成することで、アプリケーションランチャーのように扱うことができます。

今回はデスクトップにアイコンを配置し、ダブルクリックでスリープ禁止を実行できるようにします。

1. デスクトップ用のファイルを作成する

以下のコマンドを実行します。

set desktop_dir (xdg-user-dir DESKTOP)

echo "[Desktop Entry]
Version=1.0
Type=Application
Name=No Sleep
Comment=Temporarily prevent system sleep
Exec=konsole --nofork -e /bin/bash \"$HOME/Applications/no-sleep.sh\"
Icon=system-suspend
Terminal=false
Categories=Utility;" > $desktop_dir/No-Sleep.desktop

Fishでは、bashのように <<EOF(ヒアドキュメント)や 変数名="値" の書き方が使えません。そのため、変数は set で設定し、複数行の文字列をそのまま echo で書き出しています。

これで、デスクトップに No-Sleep.desktop というファイルが作成されます。

2. 実行権限を付与する

こちらも実行権限を付与します。

chmod +x (xdg-user-dir DESKTOP)/No-Sleep.desktop

3. ダブルクリックで起動する

デスクトップに「No Sleep」というアイコンが表示されます。

ダブルクリックするとKonsoleが起動し、スリープ禁止が有効になります。

初回起動時には、KDE Plasmaからファイルの実行や信頼に関する確認が表示される場合があります。その場合は、実行を許可してください。

使い方

操作動作
アイコンをダブルクリックスリープ禁止を開始
Ctrl + Cスリープ禁止を解除
Konsoleのウィンドウを閉じるスリープ禁止を解除

これで、毎回コマンドを入力する必要がなくなりました。

まとめ

今回は、CachyOSで一時的にスリープを禁止する方法を紹介しました。

systemd-inhibit を使えば簡単に実現できますが、シェルスクリプトと .desktop ファイルを組み合わせることで、ダブルクリックするだけで使えるようになります。

Linuxでは、ちょっとしたシェルスクリプトを作成するだけで、日常的に使うコマンドを簡単にアプリケーション化できます。

今回のように、毎回コマンドを調べたり入力したりするのが面倒な場合は、よく使うコマンドをファイル化しておくと便利です。

なお、この記事のスクリプトは --what=idle:sleep を使っているので、実行中は画面の暗転とスクリーンロックも止まります。席を離れるときは、画面が自動でロックされないので、次のコマンドで手動ロックしてください。

loginctl lock-session

画面のロックを残したい場合は、スクリプトの --what=idle:sleep を --what=sleep に変えてください。ただし、挙動はご自身の環境によって変わる可能性があります。


Share this post:

Next Post
畳にベッドの凹み防止をDIY|賃貸の退去で張替え負担なしだった方法