使用 Crontab 的脚本运行没有声音的 VLC 视频

使用 Crontab 的脚本运行没有声音的 VLC 视频

我已经设置了一个测试脚本来播放视频VLC-3.0.12 (曼扎罗)使用crontab (克罗尼-1.5.7)。有问题的文件如下所示:

#!/bin/bash
## YES, I'M RICKROLLING MYSELF FOR TESTING

[[ "$HOME" != "/home/drjeff16" ]] && exit 1
[[ -n "$(pgrep vlc)" ]] && exit 1

# SINCE CRON DOES NOT SET THE EXISTING X11 ENV VARS, SET THE DISPLAY MANUALLY
DISPLAY=:0.0

if [[ "$isCron" == "0" ]] ; then                                # IF RUNNING FROM REGULAR TERMINAL ENVIRONMENT
  echo '[[ -n "$(pgrep vlc)" ]] && killall vlc' | /usr/bin/at now + 5 minutes
  nhp vlc "$HOME"/Videos/Music/Never-Gonna-Give-You-Up.mp4      # 'nhp' IS 'nohup <command> &!' AS AN EXPORTED
                                                                # FUNCTION TO AVOID APPS HIJACKING MY TERMINAL
  exit 0
elif [[ "$isCron" == "1" ]] ; then                              # ELSE IF RUNNING FROM CRONTAB ($isCron IS 1 ON CRON ENV)
  echo '[[ -n "$(pgrep vlc)" ]] && killall vlc' | /usr/bin/at now + 5 minutes
  vlc "$HOME"/Videos/Music/Never-Gonna-Give-You-Up.mp4
  exit 0
fi

exit 1

从我的正常环境执行此脚本不会导致任何问题。但是,当从 运行它时crontabVLC 确实运行并显示视频,但任何地方都没有音频输出

在阅读 VLC 的手册条目时,我在以下部分man vlc遇到了该变量:$OSSAUDIO_DEVENVIRONMENT VARIABLES

.
.
OSSAUDIO_DEV
              The default audio output device, used by the OSSv4 output plugin.
.
.

$OSSAUDIO_DEV我的问题是我是否需要在我的环境中手动设置变量,或者是否有另一个与、或我的crontab变量有关的变量ALSAPulseaudiodbus变量,或者是否必须在我的环境中手动声明与 、 或我的会话定时任务文件:

# *    *    *   *    *  Command_to_execute
# |    |    |    |   |       
# |    |    |    |    Day of the Week ( 0 - 6 ) ( Sunday = 0 )
# |    |    |    |
# |    |    |    Month ( 1 - 12 )
# |    |    |
# |    |    Day of Month ( 1 - 31 )
# |    |
# |    Hour ( 0 - 23 )
# |
# Min ( 0 - 59 )

SHELL=/bin/bash
HOME=/home/drjeff16
DISPLAY=:0.0
.
.
.
EDITOR="$(cat $HOME/.editor)"
isCron=1
.
.
.

答案1

这是我的样板cron答案,希望其中有帮助。

通过cron、 或at、 或运行的作业batch不会在桌面上的同一运行时环境中运行。您的任何PATH更改或其他环境变量设置都不会自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(读取man xhost)。

可以在Read 文件cron中为所有作业设置环境变量。crontabman 5 crontab

echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

由于默认情况下,command该行的部分由 解释,其语法比 更简单,因此我建议调用脚本(可执行文件,已安装,以 7 开头)来设置环境,然后调用所需的程序。crontab/bin/sh/bin/bashcommandbash#!/bin/bash

答案2

你可以尝试定义XDG。例如:

* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) /path/to/script

声音开始为我工作。不要忘记编辑作业计时 (* * * * *),这样它就不会每分钟运行一次。

相关内容