(2 odpovědi)
Uzavřeno před 4 lety.
Mám tento skript, který mění vibrace NVIDIA-SETTINGS, když je spuštěna určitá aplikace/proces (v mém případě hra Counter-Strike:Global Offensive)
Scénář:
#!/bin/bash
on="1023"
off="0"
dv="0"
# RESET
sleep 10
log "RESET"
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$off"
while true; do #daemon mode
dv=`nvidia-settings -q "[gpu:0]/DigitalVibrance[DFP-0]" -t`
if pgrep -l csgo | grep csgo_linux
then
# log "Process csgo_linux found"
if [ $dv -eq $off ]; then
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$on"
fi
else
# No process found
if [ $dv -eq $on ]; then
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$off"
fi
fi
if [ $dv -eq $on ]; then
sleep 5
else
sleep 1
fi
done
Co je na tomto skriptu špatného, proč mi zobrazuje tyto chyby?
622 csgo_linux64
/home/matas/Desktop/vib-gui.sh: line 18: [: -eq: unary operator expected
/home/matas/Desktop/vib-gui.sh: line 28: [: -eq: unary operator expected
622 csgo_linux64
/home/matas/Desktop/vib-gui.sh: line 18: [: -eq: unary operator expected
/home/matas/Desktop/vib-gui.sh: line 28: [: -eq: unary operator expected
622 csgo_linux64
/home/matas/Desktop/vib-gui.sh: line 18: [: -eq: unary operator expected
/home/matas/Desktop/vib-gui.sh: line 28: [: -eq: unary operator expected
622 csgo_linux64
/home/matas/Desktop/vib-gui.sh: line 18: [: -eq: unary operator expected
/home/matas/Desktop/vib-gui.sh: line 28: [: -eq: unary operator expected
UPRAVIT:
#!/bin/bash
on="1023"
off="0"
dv="0"
# RESET
sleep 10
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$off"
while true; do #daemon mode
dv=`nvidia-settings -q "[gpu:0]/DigitalVibrance[DFP-0]" -t`
if pgrep -l csgo | grep csgo_linux
then
# log "Process csgo_linux found"
if [ "$dv -eq $off" ]; then
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$on"
fi
else
# No process found
if [ "$dv" -eq "$on" ]; then
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$off"
fi
fi
if [ "$dv -eq $on" ]; then
sleep 5
else
sleep 1
fi
done
Přijatá odpověď:
Přepsal jsem pro vás skript, jak je uvedeno v chatu:
#!/bin/bash
# set log_enabled="true" for status output, else log_enabled="false"
log_enabled="true"
on="1023"
off="0"
dv="0"
log () {
if $log_enabled
then
echo "$(date +%H:%M:%S) - $1"
fi
}
log "waiting 10 seconds..."
sleep 10
log "resetting DigitalVibrance to $off (off)"
nvidia-settings -a "DigitalVibrance=$off" > /dev/null
log "beginning to watch for csgo_linux processes"
while true
do
dv=$(nvidia-settings -q "DigitalVibrance" -t)
log "current DigitalVibrance setting: $dv"
if pgrep "csgo_linux" > /dev/null
then # if CS:GO is running
if [ "$dv" -eq "$off" ]
then # if DigitalVibrance is currently off
log "setting DigitalVibrance to $on (on)"
nvidia-settings -a "DigitalVibrance=$on" > /dev/null
fi
else # if CS:GO is not running
if [ "$dv" -eq "$on" ]
then # if DigitalVibrance is currently on
log "setting DigitalVibrance to $off (off)"
nvidia-settings -a "DigitalVibrance=$off" > /dev/null
fi
fi
if [ "$dv" -eq "$on" ]
then
sleep 5
else
sleep 1
fi
done
To by mělo fungovat dobře, s výjimkou případu, kdy příkaz nvidia-settings -q "DigitalVibrance" -t
má prázdný výstup místo toho, aby vrátil aktuální hodnotu nastavení jako číslo.
Je lépe naformátovaný, opravuje některé chyby, které jsme měli v původním skriptu, správně cituje proměnné v if
testuje a používá skutečně fungující příkazy k získání a nastavení hodnoty nastavení nvidia, protože jsme zjistili, že ty v původním skriptu ve vašem systému nic neudělaly. Také jsem přidal volitelnou funkci protokolování pro zobrazení některých stavových výstupů v konzole, kterou můžete zakázat nahrazením řádku log_enabled="true"
s log_enabled="false"
.
O tom, jak spustit tento skript automaticky při přihlášení, si můžete přečíst Jak automaticky spustím aplikace při přihlášení? nebo Jak přidat skript do Startup Applications z příkazového řádku?