Bash 脚本无法使用热键正确运行,但可以通过终端仿真器正常运行

Bash 脚本无法使用热键正确运行,但可以通过终端仿真器正常运行

我正在使用 Ubuntu GNOME 16.04,我编写的用于在屏幕之间切换的 bash 脚本遇到了问题。它使用xrandr命令grep来找出运行时启用了哪个屏幕,并根据该命令的输出切换到再次使用禁用的任一屏幕xrandr。还有一些pacmd命令将默认音频输出从 HDMI 音频切换到此计算机的 pci 声卡,然后将所有 pulseaudio 接收器移动到新输出。

我的问题是,这个脚本运行良好,我使用任何终端仿真器运行它,但是当我使用设置的热键运行它时Settings -> Keyboard -> Shortcuts -> Custom,它总是无法完全运行,并且它会破坏我的屏幕设置(它镜像了所有的设置!)。

我已经研究这个问题好久了,但我自己就是搞不定。我甚至在不同的发行版之间切换,以为这可能是 xorg 的一个错误,但我就是无法让它工作。

我粘贴了我的脚本代码,希望能得到一些帮助。

提前致谢。

#!/bin/bash

SINK_ID=$(pactl list sink-inputs | sed -n 's/^Sink Input #\([0-9]*\)$/\1/p') # this line grabs all the pulseaudio sink inputs

function RunHDMIScreen { #function to change DPI and switch from monitors to HDMI TV
gsettings set org.gnome.desktop.interface scaling-factor 1
gsettings set org.gnome.desktop.interface text-scaling-factor 1.55
xrandr --output DVI-D-0 --off --output HDMI-0 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DVI-I-1 --off --output DVI-I-0 --off --output DP-1 --off --output DP-0 --off
pacmd set-default-sink "alsa_output.pci-0000_01_00.1.hdmi-stereo"
pactl move-sink-input $SINK_ID "alsa_output.pci-0000_01_00.1.hdmi-stereo"
}

function RunMonitors { #function to disable the HDMI TV and switch to monitors
gsettings set org.gnome.desktop.interface text-scaling-factor 1
xrandr --output DVI-D-0 --primary --mode 1920x1080 --pos 0x2 --rotate normal --output HDMI-0 --off --output DVI-I-1 --off --output DVI-I-0 --mode 1024x768 --pos 1920x0 --rotate normal --output DP-1 --off --output DP-0 --off
pacmd set-default-sink "alsa_output.pci-0000_03_07.0.analog-stereo"
pactl move-sink-input $SINK_ID "alsa_output.pci-0000_03_07.0.analog-stereo"
}

function HDMIConnected {
   xrandr | grep "HDMI-0" | grep "primary" #this line checks if the HDMI screen is running, i presume this one is the failing one but I don't know of any other way to check the currently active display
}

if HDMIConnected
then
RunMonitors
else
RunHDMIScreen
exit
fi

相关内容