배쉬 스크립트redirect-brightness

배쉬 스크립트redirect-brightness

OS : 우분투 - 18.04 LTS

/sys/class/backlight/디렉토리 에 2개의 심볼릭 링크가 있습니다 .

acpi_video0 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/backlight/acpi_video0/
nv_backlight -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-LVDS-1/nv_backlight/

밝기 단축키는 값을 변경합니다 acpi_video0/brightness. 그러나 이것이 실제로 디스플레이의 밝기를 변경하지는 않습니다.

그러나 값을 수동으로 변경하면 nv_backlight/brightness실제로 디스플레이의 밝기가 변경됩니다.

따라서 단축키를 nv_backlight대신 에 연결하면 acpi_video0문제가 해결되지만 어떻게 해야 할지 모르겠습니다.

편집: 밝기(단축키)에 대한 Fn 키 작동 시 화면에 팝업 슬라이더 진행률 표시줄이 나타납니다.

편집하다:

  1. 입력:

    cat /sys/class/backlight/nv_backlight/max_brightness
    

    산출:

    100
    
  2. 입력:

    cat /sys/class/backlight/nv_backlight/actual_brightness
    

    출력(이 값은 자동으로 동일한 값으로 변경되며 수동으로 에 제공했습니다 /sys/class/backlight/nv_backlight/brightness):

    10
    
  3. 입력:

    cat /sys/class/backlight/acpi_video0/max_brightness
    

    산출:

    15
    

답변1

배쉬 스크립트redirect-brightness

문제는 밝기를 높이거나 낮추는 기능 키가 /sys/class/backlight/acpi_video0/brightness대신 업데이트된다는 것입니다./sys/class/backlight/nv_backlight/brightness

원래 요청은 기능 키를 가로채서 이를 사용하여 운전자를 제어하는 ​​것이었습니다 nv_backlight. 이것의 문제는 다음과 같습니다.

  • 까다로운 udev스크립트
  • 복잡한 Python 스크립팅 없이 밝기를 표시하는 팝업 알림 슬라이더가 없습니다.

해결책은 을 사용 inotify하여 acpi_video0. 그런 다음 밝기 비율을 계산하고 동일한 비율을 에 적용합니다 nv_backlight.

아래 bash 스크립트에서 다음을 설정해야 합니다.

WatchDriver="/sys/class/backlight/acpi_video0/brightness"
PatchDriver="/sys/class/backlight/nv_backlight/brightness"

스크립트를 배치 /usr/local/bin하고 다음을 사용하여 실행 가능하게 만듭니다.

chmod a+x /usr/local/bin/redirect-brightness

먼저 다음을 사용하여 명령줄에서 스크립트를 실행합니다.

redirect-brightness -l

문제가 있는 경우 다음을 사용하여 로그 파일을 확인하십시오.

cat /tmp/redirect-brightness.log

모든 것이 제대로 작동하면 redirect-brightness시작 응용 프로그램에 추가하십시오.

redirect-brightness배시 스크립트

#!/bin/bash

# NAME: redirect-brightness
# PATH: /usr/local/bin
# DESC: Redirect to correct driver when Ubuntu is adjusting the wrong
#       /sys/class/DRIVER_NAME/brightness

# DATE: June 13, 2018. Modified June 14, 2018.

# NOTE: Written for Ubuntu question:
#       https://askubuntu.com/q/1045624/307523

WatchDriver="/sys/class/backlight/intel_backlight"
PatchDriver="/sys/class/backlight/intel_backlight"

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    echo >&2 "Root access required. Use: 'sudo redirect-brightness'"
    exit 1
fi

# inotifywait required
type inotifywait >/dev/null 2>&1 || \
    { echo >&2 "'inotifywait' required but it's not installed.  Aborting."; \
      echo >&2 "Use 'sudo apt install inotify-tools' to install it.'"; \
      exit 1; }

# Was right watch driver directory name setup correctly?
if [[ ! -d $WatchDriver ]]; then
    echo >&2 "Watch directory: '$WatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Was right patch driver directory name setup correctly?
if [[ ! -d $PatchDriver ]]; then
    echo >&2 "Redirect to directory: '$PatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Get maximum brightness values
WatchMax=$(cat $WatchDriver/max_brightness)
PatchMax=$(cat $PatchDriver/max_brightness)

# PARM: 1="-l" or "--log-file" then write each step to log file.
fLogFile=false
if [[ $1 == "-l" ]] || [[ $1 == "--log-file" ]]; then
    fLogFile=true
    LogFile=/tmp/redirect-brightness.log
    echo redirect-brightness LOG FILE > $LogFile
    echo WatchMax: $WatchMax PatchMax: $PatchMax >> $LogFile
fi

SetBrightness () {
    # Calculate watch current percentage
    WatchAct=$(cat $WatchDriver/actual_brightness)
    WatchPer=$(( WatchAct * 100 / WatchMax ))
    [[ $fLogFile == true ]] && echo WatchAct: $WatchAct WatchPer: $WatchPer >> $LogFile
    # Reverse engineer patch brightness to set
    PatchAct=$(( PatchMax * WatchPer / 100 ))
    echo $PatchAct | sudo tee $PatchDriver/brightness
    [[ $fLogFile == true ]] && echo PatchAct: $PatchAct >> $LogFile
}

# When machine boots, set brightness to last saved value
SetBrightness

# Wait forever for user to press Fn keys adjusting brightness up/down.
while (true); do
    inotifywait --event modify $WatchDriver/actual_brightness
    [[ $fLogFile == true ]] && \
        echo "Processing modify event in $WatchDriver/actual_brightness" >> $LogFile
    SetBrightness
done

원래 답변 2018년 6월 11일.

진행 중인 작업 답변

Ubuntu 18.04에는 비슷한 문제가 있는 nVidia 사용자가 많이 있습니다.


스크립트를 작성하기 전에

/acpi_video에 대한 변경 사항을 모방하고 /nv_backlight를 채우는 스크립트를 작성할 수 있지만 그 전에 다음을 시도해 보십시오.

  • 편집하다 /etc/default/grub.
  • 찾다quiet splash
  • 스플래시 뒤에 추가:acpi_backlight=vendor
  • 파일을 저장하세요
  • 달리다sudo update-grub

이 답변에 따르면 그것은 당신에게 효과가 있을 것입니다:Xubuntu 18.04: Fn 밝기 키가 /sys/class/backlight/nv_backlight/에서 작동하도록 합니다.


웨이랜드

Wayland에서는 밝기가 작동하지 않습니다. 사용하고 있지 않은지 확인하세요. 보다:노트북 화면의 밝기는 버튼이나 슬라이더로 조정할 수 없습니다. 편집하다

관련 정보