
私のyoutube.sh
ファイルは次の場所にあります/home/deck/Desktop/youtube.sh
。
#1/bin/env bash
pactl -- set-sink-volume 0 100%
xdg-open A youtube video link
私のyoutube.timer
ファイルは次の場所にあります/etc/systemd/system/youtube.timer
。
[Unit]
Description=My Youtube Timer
[Timer]
Unit=youtube.service
OnCalendar=*-*-* 10:40:00
Persistent=True
[Install]
WantedBy=timers.target
私のyoutube.service
ファイルは次の場所にあります/etc/systemd/system/youtube.service
。
[Unit]
Description=Youtube Service
[Service]
Type=simple
ExecStart=/home/deck/Desktop/youtube.sh
端末で実行すると、systemctl status youtube.timer
次のようになります。
(1)(deck@steamdeck ~)$ sudo systemctl status youtube.timer
[sudo] password for deck:
● youtube.timer - My Youtube Timer
Loaded: loaded (/etc/systemd/system/youtube.timer; enabled; preset: disabled)
Active: active (waiting) since Thu 2023-03-09 10:34:54 EST; 31min ago
Until: Thu 2023-03-09 10:34:54 EST; 31min ago
Trigger: Fri 2023-03-10 10:40:00 EST; 23h left
Triggers: ● youtube.service
Mar 09 10:34:54 steamdeck systemd[1]: Started My Youtube Timer.
(deck@steamdeck ~)$
実行されますが、午前10時40分にYouTubeの動画がブラウザで開かれません。私はコードをうまく扱っていないので、楽にしてください。これを行うより簡単な方法はありますか?また、なぜ実行されないのですか?
さて、指示に従ってyoutube.serviceとyoutube.timerを移動し、ターミナルで/home/deck/.config/systemd/user/
次のコマンドを実行してみました。
(deck@steamdeck system)$ systemctl --user daemon-reload
(deck@steamdeck system)$ systemctl --user enable youtube.timer
(deck@steamdeck system)$ systemctl --user status youtube.timer
○ youtube.timer - My Youtube Timer
Loaded: loaded (/home/deck/.config/systemd/user/youtube.timer; enabled; preset: enabled)
Active: inactive (dead)
Trigger: n/a
Triggers: ● youtube.service
今、明らかにトリガーは適用されず、非アクティブです。起動しようとしましたが、systemctl --user daemon-reload
なぜ認識できませんか?
答え1
Vlastimil BuriánとPonJarがすでに述べたように、スクリプトの最初の行にタイプミスがあります。
#1/bin/env bash
しなければならない:
#!/bin/env bash
しかし、より深い問題があります。
youtube.service
あなたはあなたを次のように定義しました。システムサービスそのため、デフォルトではrootとして実行されます。しかし、あなたはrootとしてGUIにログインしていません。そうですか?これにより、システムサービスはデフォルトでGUIセッションに侵入しません。
DISPLAY
システムサービスからGUIにアクセスするには、少なくとも変数と環境変数を正しく設定する必要がありますXAUTHORITY
。これを設定する正しい方法は、XAUTHORITY
実行中のXディスプレイマネージャ(gdm
またはsddm
)と現在ログインしているGUIセッションがあるかどうかによって異なります。xdm
<something-else>dm
したがって、まず、pactl
PulseAudio が root として実行される PulseAudio デーモンが見つからないため、コマンドは失敗します。なぜなら、ログインしている場合(おそらく)、通常のユーザーアカウントで実行されています。そうでない場合はログインしましたが、まったく実行されません。
その後、xdg-open
システムのデフォルトのWebブラウザを起動しようとすることができます。rootユーザーとして指定したURLを使用してください。ただし、デフォルトではシステムサービスはGUIセッションにアクセスできないため、Webブラウザは失敗します。
タイマーとサービスを次のように設定する必要があります。ユーザーサービス、何もしないでくださいシステムサービス。基本的にユニットファイルを/etc/systemd/system/
。$HOME/.config/systemd/user/
次に、GUIからログアウトして再度ログインしてテストします。
システムサービスではなくユーザーサービスを実行している場合は、systemctl
この--user
オプションを追加します。だからsystemctl --user status youtube.timer
こうなるでしょう。
ユーザーサービスは自分が属するユーザーとして実行され、自分が属するGUIセッションに自動的にアクセスできるため、GUIセッション内での作業が大幅に簡素化されます。一方、ログインしないと、これらのユーザーサービスは実行されません。