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


10

私の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

askubuntu.com/a/661747私の場合、あなたとは異なります。多分それはあなたに役立つことができます。
マレーグマ

回答:


5

この回答は、askubuntu.com / a / 661747/394818(@ sun-bearによるコメントでも参照)、askubuntu.com / q / 616272/394818およびsuperuser.com/a/1269158/585953基づいています

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

ファイルを作成します/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はでより詳細に説明unix.stackexchange.com/a/174837/163108ものである理由:

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


3

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

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

ポストは、ウェイクアップに呼ばれています。

編集:

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


1
これは私にはうまくいきませんでした。どのように機能するかを説明しているドキュメントにリンクできますか?
Ryan Lue

これも私にはうまくいきません。このスクリプトが実行されるコンテキストは非常に制限されており、システムがスリープ状態になったときにアクティブであったユーザーとしては実行されません。そのため、ディスプレイ(ここではほとんどのデスクトップユーティリティを除く)、ログインしているユーザーの情報/変数、または現在ログインしているユーザーのセッションに関連するものにはアクセスできません。次のように実行するスクリプトが必要ですデスクトップセッションのコンテキスト内でログインしているユーザー。私はまだこれを行うには何も見つけていませんが、見つけた場合はここで更新します。
theferrit32 2018

@ theferrit32では、スクリプト内から 'su'コマンドを使用して、優先ユーザーに変更できます。
borizzzzz

1

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

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

目次:

#!/ bin / sh

ポストのケース$ 1)
    /usr/lib/pm-utils/power.d/95hdparm-apm再開
    ##コマンドを貼り付けてスクリプトを実行します
    ;; esac

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.