web-dev-qa-db-ja.com

systemdウェイクアップ後にユーザースクリプトを実行する方法

私のdebian jessieデスクトップボックスが(新しい光沢のあるsystemdを介して)スリープから復帰すると、マウスの設定がデフォルトに戻り、カスタマイズがリセットされました

xinput set-prop 12 'Device Accel Constant Deceleration' 2.5

ログイン時に実行されます。

ウェイクアップ時に任意のユーザースクリプトを実行するにはどうすればよいですか?(ユーザーがXセッションの所有者であると想定します)

私が思い出せる限り、以下はsystemdセットアップに対して行った唯一のカスタマイズです(そうです、それは任意のユーザーに対しては機能しないので完全に間違っていることはわかっていますが、私は機能していませんまだそれを行う方法を...これはやや関連しています)

さらに、現在X画面を使用しているユーザーとして、ウェイクアップ前に任意のユーザースクリプトをどのように実行できますか?

cat /etc/systemd/system/i3lock.service

#systemctl enable i3lock.service

[Unit]
Description=i3lock
Before=sleep.target

[Service]
User=fommil
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/i3lock -c 000000

[Install]
WantedBy=sleep.target
10
fommil

この回答は askubuntu.com/a/661747/394818 (@ Sun-bearの comment でも参照)、 askubuntu.comに基づいています)/q/616272/394818 および superuser.com/a/1269158/58595

システムサービスの使用:

ファイル/etc/systemd/system/my_user_script.serviceを作成します。

[Unit]
Description=Run my_user_script
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target


[Service]
ExecStart=/path/to/my_user_script
#User=my_user_name
#Environment=DISPLAY=:0

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

特定の種類のスリープから復帰した後にのみサービスを実行する必要がある場合は、サスペンド/ハイバネート/ハイブリッドを削除します。特定のユーザーがサービスを実行する必要がある場合は、User=およびEnvironment=行のコメントを外して、関連するユーザー名を置き換えます。

以下を使用してサービスファイルをインストールします。

Sudo systemctl enable my_user_script

ユーザーサービスを使用しても機能しません。

User=でハードコードされたユーザー名を設定することを回避するために、.local/share/systemd/user/my_user_script.serviceでまったく同じサービスファイルを作成し、

systemctl --user enable my_user_script

ただし、これは機能しません。 @grawityは nix.stackexchange.com/a/174837/163108 で詳細を説明しています。

sleep.targetはシステムサービスに固有です。その理由は、sleep.targetはスリープ状態になるときに自動的にアクティブになる魔法のターゲットではないためです。これは、システムをスリープ状態にするputが通常のターゲットであるだけなので、当然、「ユーザー」インスタンスには同等のものはありません。 (そして残念ながら、現在「ユーザー」インスタンスはシステム全体のサービスに依存する方法がありません。)

5
davidovitch

/ lib/systemd/system-sleepにファイルを作成しました。

#!/bin/sh
case $1 in
  post)
    /bin/runme
  ;;
esac

postはウェイクアップ時に呼び出されます。

編集:

https://www.freedesktop.org/software/systemd/man/systemd-suspend.service.html

3
gam3

このファイルを開きます。

Sudo vim/lib/systemd/system-sleep/hdparm

目次:

#!/ bin/sh 
 
 case $ 1 in post)
 /usr/lib/pm-utils/power.d/95hdparm-apm resume 
 ##コマンドを貼り付けてスクリプトを実行します
 ;; esac 

コマンドは管理者権限で実行されます。

1
Abhishek Singh