一時停止から再開した後にユーザーとしてスクリプトを実行する

一時停止から再開した後にユーザーとしてスクリプトを実行する

コンピュータが一時停止状態で再起動されるたびに(私は頻繁に実行します)、オーディオは少し壊れます。私のコンピュータはEasyEffects EQを使用しており、起動時にイコライザーを適用するために実行されます。しかし、コンピュータが省電力モードで再起動すると、基本的なオーディオデバイスは少し複雑になります。デフォルトはEasyEffects EQですが、オーディオは消えますただEasyEffectsはデフォルトのオーディオシンクなので

通常、デフォルト値に設定されたデバイスは汎用アナログ受信機です。この問題を解決するために、pavucontrolを使用するときにアナログ受信機をデフォルトに設定するとオーディオのみが通過します。感性知能はありません。ただし、デフォルト値をEasyEffects EQに設定すると、、良い結果。以前はデフォルト設定でしたが、アナログ受信機をデフォルト設定に設定し、EQをデフォルト設定に設定した後にのみ機能しました。

この問題を解決するには、systemdを使用してスクリプトを作成しようとしています。 pactlを使用してアナログ受信機をデフォルト値に設定し、EQ受信機をデフォルト値に設定します。問題は、省電力モードで再起動した後にサービスを実行するという目標は、「--user」システムサービスではなく通常のシステムサービスでのみ機能することです。どうすれば解決できますか? 「ユーザー」システムサービスとして実行しようとすると機能しますが、スリープモードで再起動した後は自動的に起動しません。通常の systemd サービスとして実行すると、systemd サービスで「user」、「environment」を指定しても「sudo pactl」が動作しないため、動作しません。

停止後に実行させる他の方法はありますか?あるいは、汎用(ルート)システムサービスにその特定のコマンドを実行させることもできます。私のユーザールートアクセス権がありませんか?

一時停止から再起動した後に実行するスクリプト:

#! /usr/bin/sh

pactl set-default-sink alsa_output.pci-0000_09_00.3.analog-stereo
pactl set-default-source alsa_input.pci-0000_09_00.3.analog-stereo
sleep 20
pactl set-default-sink easyeffects_sink
pactl set-default-source easyeffects_source

答え1

  1. /usr/lib/systemd/system-sleep以下にスクリプト名を作成することは重要ではありませんが、rootが所有して実行権限を持っている必要があります。
  2. Systemdは同じスクリプトを呼び出します今後そして後ろに一時停止し、最初の引数を「pre」または「post」に渡してどちらを示します。
  3. root として実行されるスクリプト内で、次を使用して別のユーザーとして 2 番目のスクリプトを開始することができますsudo(またはsu好みに応じて).

例えば

sudo touch /usr/lib/systemd/system-sleep/custom-suspend.sh;
sudo chmod 744 /usr/lib/systemd/system-sleep/custom-suspend.sh;

スクリプト例:

#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin

if [[ "${1}" == "post" ]]; then
    #AFTER resume

    # version 1
    sudo -u someuser -i /path/to/script2.sh

    # alternative version
    # su - someuser -c /path/to/script2.sh
fi

システム情報ソース: https://blog.christophersmart.com/2016/05/11/running-scripts-before-and-after-suspens-with-systemd/

答え2

上記の答えの助けを借りて、私はそれを動作させることができました!この記事を読んだ後、/lib/systemd/system-sleep/easy効果にスクリプトを作成しました。https://github.com/wwmm/easy効果/issues/1304そこに記載されているスクリプトを使用してください。うまくいかなかったので、このトピックで提供されている情報を使用して修正しました。以下はスクリプトです。最初はGitHubの問題から来て、最後は私のために働いた。


# easyeffects - systemd suspend/resume hook

case $1 in
    pre)  pkill easyeffects ;;
    post) easyeffects --gapplication-service  ;;
esac



#!/bin/sh

# easyeffects - systemd suspend/resume hook

case $1 in
    pre)  pkill easyeffects ;;
    post) sudo -u USER-NAME DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 easyeffects --gapplication-service ;;
esac

関連情報