Estou usando o Ubuntu GNOME 16.04 e estou tendo problemas com um script bash que escrevi para alternar entre as minhas telas. Ele usa os comandos xrandr
com grep
para descobrir qual tela está ativada no tempo de execução e, dependendo da saída desse comando, alterna para uma das telas que foram desativadas usando xrandr
novamente. Também alguns comandos pacmd
para alternar a saída de áudio padrão do áudio HDMI para a placa de som pci deste computador e, em seguida, mova todos os coletores pulseaudio para a nova saída.
Meu problema é que esse script roda bem com o executável usando qualquer emulador de terminal, mas quando eu o executo com um hotkey definido em Settings -> Keyboard -> Shortcuts -> Custom
, ele sempre falha em executar completamente e ele altera minhas configurações de tela (ele espelha tudo deles!).
Eu já superei isso por um bom tempo, mas não consigo entender sozinho. Eu até troquei de distros diferentes achando que poderia ser um bug do xorg, mas não consigo fazer funcionar.
Estou colando o código do meu script na esperança de conseguir ajuda.
Obrigado antecipadamente.
#!/bin/bash
SINK_ID=$(pactl list sink-inputs | sed -n 's/^Sink Input #\([0-9]*\)$//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