Linux Mint:如何避免在播放音乐时暂停

mb7*_*744 8 power-management suspend audio linux-mint

我有一个简单的问题:我希望我的计算机在我的计算机上的桌面应用程序上播放音乐时避免挂起- 我想要做的比一个脚本做得更好,该脚本在音乐应用程序打开时让我的计算机保持唤醒状态。我正在运行 Linux Mint 18。

我想它可以逐个应用程序工作,但我也想知道是否有办法通过利用通常的 Cinnamon 声音小程序(或类似程序)来做到这一点。该小程序能够检测和控制用户打开的任何音乐应用程序的播放——Spotify、Clementine、Banshee 或其他。脚本是否可以通过某种方式从声音小程序或特定应用程序确定音乐是否正在播放?

我知道这个问题:防止 Mint 在 Spotify 中播放音乐时暂停,但接受的答案并没有解决问题,从那时起咖啡因已经完全改变了。

我想要的行为是有益的,原因有几个:

  • 如果用户让音乐应用程序在后台打开,但播放停止,计算机将不会无限期地保持唤醒状态。
  • 如果用户在音乐播放时离开计算机,想要继续播放音乐,他们不必担心让音乐播放器全屏播放以保持音乐播放。
  • 用户可以通过不同方式利用此行为。例如,他们可以在睡前选择 20 分钟轻松的音乐。当 20 分钟的播放列表结束时,计算机将暂停一夜。因此,睡眠持续时间会根据播放列表的长度自动调整。

我愿意解决这个问题,但我从来没有为这种性质的东西写过脚本,也不知道从哪里开始。这感觉非常基本但很有用,也许它应该是 Mint 的功能请求。

Jas*_*rel 2

我一直在为同样的事情而苦苦挣扎。我发现了一些其他帖子讨论使用 pactl 检查pulseaudio 的状态。这是一个链接:

https://superuser.com/questions/393448/detecting-audio-playing-in-a-bash-script

我试图编写一个非常简单的脚本,它将在音乐播放时将 Cinnamon 电源设置中的暂停超时更改为从不暂时,然后在音乐停止时恢复。这是我第一次真正尝试编写脚本,因此如果您可以对其进行改进,请随意。但它可能只适用于肉桂。

#!/bin/sh

# Script to temporarily set Cinnamon's suspend timout for AC and battery to "Never"
# while audio is playing.  It then reverts the settings when audio is no longer detected.

# Create directory to store settings if it doesn't exist.
if [ ! -d ~/.config/audiocaffeine ]; then
    echo "Configuration directory not found!"
    echo "Creating ~/.config/audiocaffeine"
    mkdir ~/.config/audiocaffeine
fi

# Restore previous value for AC suspend timeout if script
# was interrupted.
if [ -f ~/.config/audiocaffeine/acsuspend ]; then
    echo "Restoring previous AC suspend timeout."
    read acsuspendtime < ~/.config/audiocaffeine/acsuspend
    gsettings set org.cinnamon.settings-daemon.plugins.power sleep-inactive-ac-timeout $acsuspendtime
    echo "Removing temporary file ~/.config/audiocaffeine/acsuspend"
    rm ~/.config/audiocaffeine/acsuspend
fi

# Restore previous value for battery suspend timeout if script
# was interrupted.
if [ -f ~/.config/audiocaffeine/battsuspend ]; then
    echo "Restoring previous battery suspend timeout."
    read battsuspendtime < ~/.config/audiocaffeine/battsuspend
    gsettings set org.cinnamon.settings-daemon.plugins.power sleep-inactive-battery-timeout $battsuspendtime
    echo "Removing temporary file ~/.config/audiocaffeine/battsuspend"
    rm ~/.config/audiocaffeine/battsuspend
fi

# Start main loop to check if audio is playing

while true; do

    # Use pactl to detect if there are any running audio sources.
    if pactl list | grep -q RUNNING; then

        echo "Audio detected."

        # If AC timeout was not previously saved, then save it.
        if [ ! -f ~/.config/audiocaffeine/acsuspend ]; then
            echo "Saving current AC suspend timeout."
            gsettings get org.cinnamon.settings-daemon.plugins.power sleep-inactive-ac-timeout > ~/.config/audiocaffeine/acsuspend
        fi

        # If battery timeout was not previously saved, then save it.
        if [ ! -f ~/.config/audiocaffeine/battsuspend ]; then
            echo "Saving current battery suspend timeout."
            gsettings get org.cinnamon.settings-daemon.plugins.power sleep-inactive-battery-timeout > ~/.config/audiocaffeine/battsuspend
        fi

        # Set the suspend timouts to Never using gsettings.
        echo "Changing suspend timeouts."
        gsettings set org.cinnamon.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
        gsettings set org.cinnamon.settings-daemon.plugins.power sleep-inactive-battery-timeout 0

    else
        echo "No audio detected."

        # Restore previous value for AC suspend timeout and delete the
        # temporary file storing it.
        if [ -f ~/.config/audiocaffeine/acsuspend ]; then
            echo "Restoring previous AC suspend timeout."
            read acsuspendtime < ~/.config/audiocaffeine/acsuspend
            gsettings set org.cinnamon.settings-daemon.plugins.power sleep-inactive-ac-timeout $acsuspendtime
            echo "Removing temporary file ~/.config/audiocaffeine/acsuspend"
            rm ~/.config/audiocaffeine/acsuspend
        fi

        # Restore previous value for battery suspend timeout and delete the
        # temporary file storing it.
        if [ -f ~/.config/audiocaffeine/battsuspend ]; then
            echo "Restoring previous battery suspend timeout."
            read battsuspendtime < ~/.config/audiocaffeine/battsuspend
            gsettings set org.cinnamon.settings-daemon.plugins.power sleep-inactive-battery-timeout $battsuspendtime
            echo "Removing temporary file ~/.config/audiocaffeine/battsuspend"
            rm ~/.config/audiocaffeine/battsuspend
        fi

    fi

    # Pause the script for 60 seconds before doing the loop again.
    sleep 60s

done
Run Code Online (Sandbox Code Playgroud)