82 lines
2.7 KiB
Bash
Executable File
82 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Проверяем, передан ли аргумент (например, +10, -10 или абсолютное значение)
|
||
if [ -z "$1" ]; then
|
||
echo "Ошибка: укажи изменение яркости (например, +10, -10 или 50)"
|
||
exit 1
|
||
fi
|
||
|
||
# Временный файл для хранения значения яркости
|
||
TEMP_FILE="/tmp/ddc_brightness_value"
|
||
DEBOUNCE_FILE="/tmp/ddc_brightness_debounce"
|
||
|
||
# Функция для получения текущей яркости
|
||
get_current_brightness() {
|
||
ddcutil getvcp 10 | grep -oP '(?<=current value = )\s*\d+' | tr -d ' '
|
||
}
|
||
|
||
# Читаем текущее значение из файла или получаем с монитора, если файла нет
|
||
if [ -f "$TEMP_FILE" ]; then
|
||
CURRENT_VALUE=$(cat "$TEMP_FILE")
|
||
else
|
||
CURRENT_VALUE=$(get_current_brightness)
|
||
echo "$CURRENT_VALUE" > "$TEMP_FILE"
|
||
fi
|
||
|
||
# Вычисляем новое значение
|
||
if [[ "$1" =~ ^[+-] ]]; then
|
||
NEW_VALUE=$((CURRENT_VALUE + $1))
|
||
else
|
||
NEW_VALUE="$1"
|
||
fi
|
||
|
||
# Ограничиваем значение в пределах 0-100
|
||
if [ "$NEW_VALUE" -lt 0 ]; then
|
||
NEW_VALUE=0
|
||
elif [ "$NEW_VALUE" -gt 100 ]; then
|
||
NEW_VALUE=100
|
||
fi
|
||
|
||
# Записываем новое значение во временный файл
|
||
echo "$NEW_VALUE" > "$TEMP_FILE"
|
||
echo "$NEW_VALUE" >> /tmp/wobpipe
|
||
|
||
# Обновляем метку времени для debounce
|
||
touch "$DEBOUNCE_FILE"
|
||
|
||
# Функция для установки яркости с debounce
|
||
apply_brightness() {
|
||
# Ждём 0.5 секунды после последнего изменения
|
||
sleep 0.5
|
||
|
||
# Проверяем, не изменился ли файл с тех пор
|
||
NOW=$(date +%s%3N)
|
||
LAST_CHANGE=$(cat "$TIMESTAMP_FILE" 2>/dev/null || echo 0)
|
||
|
||
# Проверяем, прошло ли 500 мс (0.5 с) с последнего изменения
|
||
if [ $((NOW - LAST_CHANGE)) -lt 500 ]; then
|
||
exit 0
|
||
fi
|
||
|
||
# Читаем финальное значение из файла
|
||
FINAL_VALUE=$(cat "$TEMP_FILE")
|
||
|
||
# Устанавливаем яркость
|
||
ddcutil setvcp 10 "$FINAL_VALUE" > /tmp/ddcutil_output 2>&1
|
||
|
||
# Получаем текущую яркость для вывода
|
||
RESULT="$(ddcutil getvcp 10)"
|
||
CURRENT_PERC="$(echo "$RESULT" | grep -oP '(?<=current value = )\s*\d+' | tr -d ' ')"
|
||
|
||
# Выводим результат и записываем в wobpipe
|
||
echo "$RESULT"
|
||
echo "\"$CURRENT_PERC\""
|
||
}
|
||
|
||
# Запускаем применение яркости в фоновом режиме, если ещё не запущено
|
||
if ! pgrep -f "apply_brightness" > /dev/null; then
|
||
apply_brightness &
|
||
fi
|
||
|
||
exit 0
|