Как сохранить разрешение при перезагрузке для сценария на запись в `/sys/class/backlight/acpi_video0/brightness`?

я написал скрипт, который позволяет мне переключать яркость экрана моего ноутбука (я запускаю if с помощью горячей клавиши, привязанной к xbindkeys),
но это требует записи в /sys/class/backlight/acpi_video0/brightness.

На данный момент я просто сделал так, чтобы он мог записывать в этот файл, выполнив
sudo chown $USER: /sys/class/backlight/acpi_video0/brightness
, но это сбрасывается после каждой перезагрузки. ноутбук,
поэтому мне нужно перезапустить его, прежде чем я смогу использовать свою горячую клавишу.

Как правильно и постоянно это делать?



EDIT_3 (т.е. добавлено после следующих двух правок) (технически «ответ»):

Мне надоело пытаться заставить работать udev,
и (после долгого замешательства (неизвестное количество которых было вызвано тем, что я просто опечатался и пропустил букву "t" в слове "яркость"))
наконец заставил его работать так:

(Чтобы быть явным, мой echo $USERравен o1.)

Итак,


  • (1)

я создал файл:
/home/o1/.icanhasbrightness.sh
, содержащий:

#!/usr/bin/bash  
chown o1: /sys/class/backlight/acpi_video0/brightness  

  • (2)

Я сделал:
> sudo chown root:root /home/o1/.icanhasbrightness.sh
и
> sudo chmod 0711 /home/o1/.icanhasbrightness.sh
(
такой, что
> stat /home/o1/.icanhasbrightness.sh|head -n 4|tail -n 1
#=>
Доступ: (0711/-rwx--x--x) Uid: ( 0/ корень) Gid: ( 0/ корень)
)


  • (3)

Я сделал:
> sudo visudo
и добавил строку:
o1 ALL=(ALL) NOPASSWD: /home/o1/.icanhasbrightness.sh


  • (4)

Я изменил свою функцию fishshell для проверки если я невладелец файла яркости, и если нет, запустите этот скрипт.
(

function brightness_set_current  
    #todo this is prolly the "wrong" way of handling this but whatever it works  
        if test $USER != (stat -c %U /sys/class/backlight/acpi_video0/brightness)  
            sudo /home/o1/.icanhasbrightness.sh  
        end  
    echo $argv > /sys/class/backlight/acpi_video0/brightness  
end  

)


... Итак, я думаю, что технически это отвечает на мой собственный вопрос, но...

  • (1) Я чувствую, что это, вероятно, "неправильный" способ сделать это (?)
  • (2) Я уже так устал возиться с этим, что мне не хочется публиковать это "ответ" все равно сейчас

(((
И в интересах любых гипотетических будущих эквивалентов моего прошлого «я»
(
т. е., по общему признанию, не имеет отношения к фактическому вопросу, на который я пытался получить здесь ответ,
но я пока оставлю его здесь и придумаю какое-нибудь лучшее место, чтобы поместить его позже, где он, скорее всего, быть увиденным тем, кому это будет полезно
),
кому просто нужна горячая клавиша для переключения яркости и цветовой температуры экрана,
затем, предполагая, что вы уже используете fishshell (и знаете, как сохранить их как функции автозагрузки и все такое), код был:

function brightness_get_current
    cat /sys/class/backlight/acpi_video0/brightness
end

function brightness_set_current
    #td FIX(?)
        if test $USER != (stat -c %U /sys/class/backlight/acpi_video0/brightness)
            sudo /home/o1/.icanhasbrightness.sh
        end
    echo $argv > /sys/class/backlight/acpi_video0/brightness
end

function brightness_get_max --description 'max brightness, mb'
    cat /sys/class/backlight/acpi_video0/max_brightness
end

function brightness_set_max --description 'max brightness, mb'
    brightness_set_current (brightness_get_max)
end

function brightness_toggle
    #
        #
            set -l verbose $argv
            set -l current_brightness (brightness_get_current)
            set -l current_ct (xsct|g --nocolor -o '\d+$')
                #bk
                    # echo current_ct $current_ct
        #
            set -l brightness
                if test $current_brightness -eq 0
                    set brightness 'min'
                else if test $current_brightness -eq (brightness_get_max)
                    set brightness 'max'
                else
                    set brightness 'mid'
                end
            set -l redness
                if test $current_ct -eq 1000
                    set redness 'red'
                else if test $current_ct -lt 1000
                    set redness 'red_super'
                else if test $current_ct -lt 700
                    set redness 'red_impossible'
                else if test $current_ct -lt 6500
                    set redness 'mid'
                else if test $current_ct -eq 6500
                    set redness 'white'
                else
                    set redness 'blue'
                end
        #
            function brightness_set_to_max_white
                brightness_set_max
                D0 xsct 0   #ie 6500
            end
            function brightness_set_to_min_red
                brightness_set_current 0
                D0 xsct 1000
            end
            function brightness_set_to_min_white
                brightness_set_current 0
                D0 xsct 0   #ie 6500
            end
        #
            #bk
                if test "$verbose"
                    echo \t'current state:'
                    echo \t\t'brightness:'  \t$brightness
                    echo \t\t'redness:'     \t$redness
                end
            #
                if test "$brightness" = 'max' -a "$redness" = 'white'
                    #bk
                        test "$verbose"
                        and echo "1 - setting to min_red   ( from max_white )"
                    brightness_set_to_min_red
                else if test "$brightness" = 'min' -a "$redness" = 'red'
                    #bk
                        test "$verbose"
                        and echo "2 - setting to min_white ( from min_red   )"
                    brightness_set_to_min_white
                else if test "$brightness" = 'min' -a "$redness" = 'white'
                    #bk
                        test "$verbose"
                        and echo "3 - setting to max_white ( from min_white )"
                    brightness_set_to_max_white
                else
                    #bk
                        test "$verbose"
                        and echo "4 - setting to max_white ( from other     )"
                    brightness_set_to_max_white
                end
end

и привязать его к ключу,
Я просто поместил в ~/.xbindkeysrcэто содержимое:

"fish -c 'brightness_toggle'"
  Mod4 + less

( Mod4 + lessпросто то, что xbindkeys -mkсказал мне, что вызывает эту комбинацию клавиш, когда Я нажал)

... ах да, кроме установки xsctнадо еще
сделать > git clone 'https://github.com/faf0/sct.git'
(хотя в каком бы каталоге вы ни хотели, чтобы каталог sctоказался в конце)
тогда
> sudo apt install libxrandr-dev(зависимость, которую необходимо скомпилировать)
затем (в то время как в этом каталоге sct, созданном git clone-ing)
> sudo make install

(
Кроме того, я настроил горячие клавиши, чтобы перевернуть край экрана вверх
. (который также зависит от этой функции яркости_set_current, потому что, по крайней мере для меня, использование xrandr -oпо какой-то причине путается с яркостью)
с рыбьей оболочкой:

function screen_orientation --description 'screen/monitor orientation - possible arguments are normal/left/right/inverted'
    set current_brightness (cat /sys/class/backlight/acpi_video-0/max_brightness)
    xrandr -o $argv
    and brightness_set_current $current_brightness

    # guess i don't need this really?
        # if thnpadd
        #   nitrogen --restore
        #   # and D0 nitrogen --restore
        # end
end

и ~/.xbindkeysrc:

"fish -c 'screen_orientation left'"  
  Mod4 + Left  
"fish -c 'screen_orientation normal'"  
  Mod4 + Up  
"fish -c 'screen_orientation right'"  
  Mod4 + Right  
"fish -c 'screen_orientation inverted'"  
  Mod4 + Down  

)
)))




EDIT_1 ("udev may?"):

Я нашел на архвики:

По умолчанию только rootможет изменять яркость этим метод. Чтобы позволить пользователям [например] в группе видеоизменять яркость, можно использовать правило udev, подобное следующему:
[записать в этот файл:]
/etc/udev/rules.d/backlight.rules
[это содержание:]
ACTION=="добавить", SUBSYSTEM=="подсветка",KERNEL=="acpi_video0", GROUP="video", MODE="0664"

Итак, я сделал это, затем сделал:
sudo groupadd video
и:
sudo usermod -aG video o1
(
Что ж, если предположить, что я правильно помню, что и в каком порядке делал,
но несмотря на это, группы $USERдействительноподтверждают, что я являюсьв группе видео.
)

но после перезагрузки, все равно, при попытке написать в него вот так все равно получается:
> echo 5 > /sys/class/backlight/acpi_video0/brightness
#=>

warning: An error occurred while redirecting file '/sys/class/backlight/acpi_video0/brightness'  
open: Permission denied  

и это:
> stat /sys/class/backlight/acpi_video0/brightness
#=>

  File: /sys/class/backlight/acpi_video0/brightness  
  Size: 4096            Blocks: 0          IO Block: 4096   regular file  
Device: 16h/22d Inode: 22741       Links: 1  
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)  
Access: 2021-09-24 10:51:53.894540644 -0700  
Modify: 2021-09-24 10:51:53.888124116 -0700  
Change: 2021-09-24 10:51:53.888124116 -0700  
 Birth: -  

, что означает, что только rootимеет права на запись в файл, верно?

Это правило udev должно было... сменить владельца файла на группу video, верно?
(
Предполагая, что «этот файл принадлежит этой группе», правильно понимается концепция и/или терминология...?
В любом случае, предполагалось дать группе videoправа на запись в файл, верно?
)

Так почему не получилось?
-- Я имею в виду, поскольку я не могу точно запрыгнуть на арку и попробовать,
Я могу только предположить, что то, что я сделал , сработало бына арх(?),
так чем отличается убунту?


EDIT_2 ("udev должен работать??"):

Насколько я понимаю из этого руководства по udev ,
это должноработать?
(
Или, во всяком случае, он говорит:
Файл правил чтения: /etc/udev/rules.d/backlight.rules
-- но нетсказать что-нибудь о "ГРУППА"ИЛИ" РЕЖИМ".
)

(Я также попытался изменить =на :=(чтобы «убедиться, что это не переопределяется другими правилами»), на всякий случай. )

> udevadm info -a /sys/class/backlight/acpi_video0/
#=>

    Udevadm info starts with the device specified by the devpath and then  
    walks up the chain of parent devices. It prints for every device  
    found, all possible attributes in the udev rules key format.  
    A rule to match, can be composed by the attributes of the device  
    and the attributes from one single parent device.

      looking at device '/devices/pci0000:00/0000:00:01.0/backlight/acpi_video0':  
        KERNEL=="acpi_video0"  
        SUBSYSTEM=="backlight"  
        DRIVER==""  
        ATTR{max_brightness}=="15"  
        ATTR{actual_brightness}=="15"  
        ATTR{bl_power}=="0"  
        ATTR{type}=="firmware"  
        ATTR{brightness}=="15"  
        ATTR{scale}=="unknown"

      looking at parent device '/devices/pci0000:00/0000:00:01.0':  
        KERNELS=="0000:00:01.0"  
        SUBSYSTEMS=="pci"  
        DRIVERS=="radeon"  
        ATTRS{local_cpulist}=="0-1"  
        ATTRS{msi_bus}=="1"  
        ATTRS{max_link_width}=="255"  
        ATTRS{consistent_dma_mask_bits}=="40"  
        ATTRS{driver_override}=="(null)"  
        ATTRS{power_dpm_state}=="balanced"  
        ATTRS{revision}=="0x00"  
        ATTRS{device}=="0x9648"  
        ATTRS{local_cpus}=="3"  
        ATTRS{subsystem_device}=="0x21ea"  
        ATTRS{d3cold_allowed}=="1"  
        ATTRS{power_method}=="dpm"  
        ATTRS{numa_node}=="-1"  
        ATTRS{broken_parity_status}=="0"  
        ATTRS{power_state}=="D0"  
        ATTRS{boot_vga}=="1"  
        ATTRS{irq}=="31"  
        ATTRS{current_link_width}=="0"  
        ATTRS{current_link_speed}=="Unknown"  
        ATTRS{class}=="0x030000"  
        ATTRS{power_profile}=="default"  
        ATTRS{dma_mask_bits}=="40"  
        ATTRS{vendor}=="0x1002"  
        ATTRS{subsystem_vendor}=="0x17aa"  
        ATTRS{enable}=="1"  
        ATTRS{power_dpm_force_performance_level}=="auto"  
        ATTRS{ari_enabled}=="0"  
        ATTRS{max_link_speed}=="Unknown"

      looking at parent device '/devices/pci0000:00':  
        KERNELS=="pci0000:00"  
        SUBSYSTEMS==""  
        DRIVERS==""  

и:
> udevadm test --action="add" '/devices/pci0000:00/0000:00:01.0/backlight/acpi_video0'
#=>

    Load module index  
    Parsed configuration file /usr/lib/systemd/network/99-default.link  
    Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link  
    Created link configuration context.  
    Reading rules file: /usr/lib/udev/rules.d/39-usbmuxd.rules  
    Reading rules file: /usr/lib/udev/rules.d/40-usb-media-players.rules  
    Reading rules file: /usr/lib/udev/rules.d/40-usb_modeswitch.rules  
    Reading rules file: /usr/lib/udev/rules.d/40-vm-hotadd.rules  
    Reading rules file: /usr/lib/udev/rules.d/50-apport.rules  
    Reading rules file: /usr/lib/udev/rules.d/50-firmware.rules  
    Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules  
    Reading rules file: /usr/lib/udev/rules.d/55-dm.rules  
    Reading rules file: /usr/lib/udev/rules.d/55-ippusbxd.rules  
    Reading rules file: /usr/lib/udev/rules.d/56-hpmud.rules  
    Reading rules file: /usr/lib/udev/rules.d/56-lvm.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-autosuspend-chromiumos.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-block.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-crda.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-drm.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-evdev.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-fido-id.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-input-id.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-inputattach.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-libgphoto2-6.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-libsane.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-pcmcia.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-dm.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-sensor.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-serial.rules  
    Reading rules file: /usr/lib/udev/rules.d/60-tpm-udev.rules  
    Reading rules file: /usr/lib/udev/rules.d/61-autosuspend-manual.rules  
    Reading rules file: /usr/lib/udev/rules.d/61-kde-bluetooth-rfkill.rules  
    Reading rules file: /usr/lib/udev/rules.d/61-persistent-storage-android.rules  
    Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules  
    Reading rules file: /usr/lib/udev/rules.d/64-xorg-xkb.rules  
    Reading rules file: /usr/lib/udev/rules.d/65-libwacom.rules  
    Reading rules file: /usr/lib/udev/rules.d/66-snapd-autoimport.rules  
    Reading rules file: /usr/lib/udev/rules.d/69-cd-sensors.rules  
    Reading rules file: /usr/lib/udev/rules.d/69-libmtp.rules  
    Reading rules file: /usr/lib/udev/rules.d/69-lvm-metad.rules  
    Reading rules file: /usr/lib/udev/rules.d/69-wacom.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-joystick.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-pcspkr-beep.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-printers.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-spice-vdagentd.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-touchpad.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-u2f.rules  
    Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules  
    Reading rules file: /usr/lib/udev/rules.d/71-power-switch-proliant.rules  
    Reading rules file: /usr/lib/udev/rules.d/71-seat.rules  
    Reading rules file: /usr/lib/udev/rules.d/71-u-d-c-gpu-detection.rules  
    Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules  
    Reading rules file: /usr/lib/udev/rules.d/73-special-net-names.rules  
    Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules  
    Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-broadmobi-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-cinterion-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-dell-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-dlink-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-ericsson-mbm.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-fibocom-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-foxconn-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-gosuncn-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-haier-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-huawei-net-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-longcheer-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-mtk-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-nokia-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-pcmcia-device-blacklist.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-qdl-device-blacklist.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-quectel-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-sierra.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-simtech-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-telit-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-tplink-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-ublox-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-usb-device-blacklist.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-usb-serial-adapters-greylist.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-x22x-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/77-mm-zte-port-types.rules  
    Reading rules file: /usr/lib/udev/rules.d/78-graphics-card.rules  
    Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules  
    Reading rules file: /usr/lib/udev/rules.d/80-debian-compat.rules  
    Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules  
    Reading rules file: /usr/lib/udev/rules.d/80-iio-sensor-proxy.rules  
    Reading rules file: /usr/lib/udev/rules.d/80-libinput-device-groups.rules  
    Reading rules file: /usr/lib/udev/rules.d/80-mm-candidate.rules  
    Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules  
    Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules  
    Reading rules file: /usr/lib/udev/rules.d/81-net-dhcp.rules  
    Reading rules file: /usr/lib/udev/rules.d/84-nm-drivers.rules  
    Reading rules file: /usr/lib/udev/rules.d/85-hdparm.rules  
    Reading rules file: /usr/lib/udev/rules.d/85-hplj10xx.rules  
    Reading rules file: /usr/lib/udev/rules.d/85-nm-unmanaged.rules  
    Reading rules file: /usr/lib/udev/rules.d/85-regulatory.rules  
    Reading rules file: /usr/lib/udev/rules.d/85-tlp-rdw.rules  
    Reading rules file: /usr/lib/udev/rules.d/85-tlp.rules  
    Reading rules file: /usr/lib/udev/rules.d/90-alsa-restore.rules  
    Reading rules file: /usr/lib/udev/rules.d/90-bolt.rules  
    Reading rules file: /usr/lib/udev/rules.d/90-console-setup.rules  
    Reading rules file: /usr/lib/udev/rules.d/90-fwupd-devices.rules  
    Reading rules file: /usr/lib/udev/rules.d/90-libinput-fuzz-override.rules  
    Reading rules file: /usr/lib/udev/rules.d/90-nm-thunderbolt.rules  
    Reading rules file: /usr/lib/udev/rules.d/90-pulseaudio.rules  
    Reading rules file: /usr/lib/udev/rules.d/95-cd-devices.rules  
    Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules  
    Reading rules file: /usr/lib/udev/rules.d/95-upower-csr.rules  
    Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules  
    Reading rules file: /usr/lib/udev/rules.d/95-upower-hidpp.rules  
    Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules  
    Reading rules file: /usr/lib/udev/rules.d/96-e2scrub.rules  
    Reading rules file: /usr/lib/udev/rules.d/97-hid2hci.rules  
    Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules  
    Reading rules file: /etc/udev/rules.d/backlight.rules  
    Unload module index  
    Unloaded link configuration context.  
    This program is for debugging only, it does not run any program  
    specified by a RUN key. It may show incorrect results, because  
    some values may be different, or not available at a simulation run.

    DEVPATH=/devices/pci0000:00/0000:00:01.0/backlight/acpi_video0  
    ACTION=add  
    SUBSYSTEM=backlight  
    TAGS=:seat:systemd:  
    ID_PATH=pci-0000:00:01.0  
    ID_PATH_TAG=pci-0000_00_01_0  
    ID_FOR_SEAT=backlight-pci-0000_00_01_0  
    SYSTEMD_WANTS=systemd-backlight@backlight:acpi_video0.service  
    USEC_INITIALIZED=2680045  
0
задан 22 September 2021 в 21:46

0 ответов

Другие вопросы по тегам:

Похожие вопросы: