目標は、画面がロックされているときに音をミュートすることです。
理想的には、ロックを解除した後でも音が復元されます。
サウンドシステムはPulseaudioです。
答え1
このスクリプトを起動します(またはログイン時に自動的に起動するようにこのスクリプトを設定します)。
#!/bin/bash -euET
{
set -o pipefail
export DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:-unix:path=/run/user/$(id -u)/bus}"
export DISPLAY="${DISPLAY:-:0}"
xscreensaver-command -watch | while read -r line ; do
echo "handling event: $line"
if [[ $line = LOCK* ]]; then
volume=$(pamixer --get-volume)
echo "current volume is $volume"
pamixer --set-volume 0
fi
if [[ $line = UNBLANK* ]]; then
echo "setting volume to $volume"
pamixer --set-volume "$volume"
fi
done
exit
}
説明する:このスクリプトの「デーモン」部分はxscreensaver-command -watch
停止し、xscreensaverのイベントを待ちます。 「LOCK」または「UNBLANK」イベントが発生するたびに、ボリュームはそれぞれ0にリセットされ復元されます。
答え2
提案通り、amixerの代わりにpactlを使用しました。ニック・ノース
pactl set-sink-mute @DEFAULT_SINK@ toggle
存在するデバイスがロックされている場合は、すべての音を無音に設定します。
興味のある方のための完全なコードは次のとおりです。それは関連しているクリフスタンフォードコードは本質的に
ターミナルウィンドウを開き、パスの「user」をユーザー名に置き換えます(該当する場合)。
nano /home/'user'/.local/share/applications/MuteLock.sh
次に、次をウィンドウに貼り付けて、Ctrl + o(保存)とCtrl + x(終了)を押します。
#!/bin/bash
# Credit for code:
#https://unix.stackexchange.com/users/14353/cliff-stanford
#https://unix.stackexchange.com/users/231160/nik-gnomic
# Post on stackexchange: https://unix.stackexchange.com/questions/467456/how-to-mute-sound-when-xscreensaver-locks-screen/589614#589614
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint --line-buffered |
while read line
do
case "$line" in
*"<true>"*)
#amixer -q -D pulse sset Master off
pactl set-sink-mute @DEFAULT_SINK@ toggle
;;
*"<false>"*)
#amixer -q -D pulse sset Master on
pactl set-sink-mute @DEFAULT_SINK@ toggle
;;
esac
done
exit
ファイルを実行可能にし、パスの「user」をユーザー名に置き換えます(該当する場合)。
chmod +x /home/'user'/.local/share/applications/MuteLock.sh
次に、Super + L(ロック画面)を実行して実行して、正しく機能していることを確認してください。
/home/'user'/.local/share/applications/MuteLock.sh &
Manjaro 20.01 Gnome 3.36バージョンでテストされ、ウェイランドで動作します。 - 動作するためにxscreensaverをインストールする必要はありません。
gnomeログインバックグラウンドでこのアプリケーションを実行するための* .desktopファイルが作成されます。フォローするマックスシュレプチガー投稿の場所Gnome Shell:セッションの開始後にシェルスクリプトを実行しますか?*.desktopファイルコード
端末を再度開き、パスの「user」をユーザー名に変更します(該当する場合)。
nano /home/'user'/.local/share/applications/MuteLock.desktop
Ctrl+o(保存)と Ctrl+x(終了)を貼り付けます。
[Desktop Entry]
Encoding=UTF-8
Type=Application
Icon=application-x-executable
Name=MuteLock
Exec=/home/'user'/.local/share/applications/MuteLock.sh
Path=/home/'user'/.local/share
Terminal=false
Hidden=false
StartupNotify=false
X-GNOME-Autostart-enabled=true
Comment=Mute on screen-lock and un-mute on screen un-lock
Categories=Settings; System; Utility
スタートアップアプリケーションの下にGnome Tweaksで作成したばかりのMuteLock.desktopファイルを追加します。
このヒントは、Dell Inspiron 7390 2-in-1ノートブックにデフォルトでインストールされている3つのLinuxディストリビューションすべてに適用されることがわかります。
Manjaro 20.0.1 カーネル v5.6,
Ubuntu 20.04 LTSカーネルv5.4 LTS、
OpenSUSE Tumbleweedカーネルv5.6と
Gnome 3.36、GDM、Xorg、Waylandと連携
libplayerctlがインストールされている場合は、コードに一時停止と再生を追加することもできます。配布パッケージマネージャでlibplayerctl(libplayerctl2)、playerctlをインストールし、次のように変更します。
case "$line" in
*"<true>"*)
playerctl -a pause #pauses all MPRIS players
#amixer -q -D pulse sset Master off
pactl set-sink-mute @DEFAULT_SINK@ toggle
;;
*"<false>"*)
#amixer -q -D pulse sset Master on
pactl set-sink-mute @DEFAULT_SINK@ toggle
playerctl play #start playing the default player
;;
esac
答え3
存在するシベントゥそしてXFCEorg.freedesktop.login1
イベントが発生していないようなので、これらのソリューションは私には適していません。 (ツイート同じ問題があるようです。 )
私に合うのはイベントを見つけることですorg.xfce.ScreenSaver
。
#!/bin/bash
gdbus monitor --session --dest org.xfce.ScreenSaver | grep "ActiveChanged" --line-buffered |
while read line
do
case "$line" in
*"(true,"*)
pactl set-sink-mute @DEFAULT_SINK@ on
;;
*"(false,"*)
pactl set-sink-mute @DEFAULT_SINK@ off
;;
esac
done
exit
答え4
私が見つけた最も簡単な方法は、起動時にシェルスクリプトを実行することです。これは、使用しているスクリーンセーバー(存在する場合)に関係なく機能します。
#!/bin/bash
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint --line-buffered |
while read line
do
case "$line" in
*"<true>"*)
amixer -q -D pulse sset Master off
;;
*"<false>"*)
amixer -q -D pulse sset Master on
;;
esac
done