Сегодня будем разбираться, как избавиться от чёрного экрана при запуске SDDM (замена KDM) в Dell Vostro 5470. Тут я не ставлю целью добиться максимального энергосбережения, т.к. KDE всё равно использует для отрисовки графики OpenGL, ведь суть optimus - использовать для отрисовки 3D как раз nvidia чип, а не встроенный intel. Также мы рассмотрим тему оживления кнопок настроек яркости, а в конце ещё и заставим кнопку suspend уводить ноутбук в ждущий режим.
Итак, чтобы настроить работу Nvidia Optimus нужно, кроме того, что описано в wiki, добавить в настройки sddm строку modesetting. Эта фича не работает в случае, если прописать её в ~/.xinitrc как некоторые советуют. И это ключевой момент.
Итак, чтобы настроить работу Nvidia Optimus нужно, кроме того, что описано в wiki, добавить в настройки sddm строку modesetting. Эта фича не работает в случае, если прописать её в ~/.xinitrc как некоторые советуют. И это ключевой момент.
# vim /usr/share/sddm/scripts/Xsetup xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --autoКасательно xorg.conf. В моём случае выглядит как-то так:
# cat /etc/X11/xorg.conf Section "ServerLayout" Identifier "layout" Screen 0 "nvidia" Inactive "intel" EndSection Section "Device" Identifier "nvidia" Driver "nvidia" BusID "PCI:09:00:0" EndSection Section "Screen" Identifier "nvidia" Device "nvidia" EndSection Section "Device" Identifier "intel" Driver "modesetting" BusID "PCI:00:02:00" Option "AccelMethod" "none" EndSection Section "Screen" Identifier "intel" Device "intel" EndSectionТеперь по драйверам. Используется проприетарные nvidia-drivers и интеловские драйвера. В make.conf имеется следующее:
VIDEO_CARDS="nvidia intel i965 modesetting"Что касается настроек в ядре:
> Device Drivers > Graphics support > <*> /dev/agpgart (AGP Support) ---> ##есть подозрение, что это совершенно не нужно {*} Intel 440LX/BX/GX, I8xx and E7x05 chipset support -*- VGA Arbitration (16) Maximum number of GPUs [*] Laptop Hybrid Graphics - GPU switching support <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> [*] Enable legacy fbdev support for your modesetting driver <M> Intel 8xx/9xx/G3x/G4x/HD Graphics Frame buffer Devices ---> [*] Enable Video Mode Handling Helpers [*] VESA VGA graphics support -*- Backlight & LCD device support ---> <*> Lowlevel LCD controls <*> Platform LCD controls {*} Lowlevel Backlight controls <*> Generic (aka Sharp Corgi) Backlight Driver Console display driver support ---> -*- VGA text console [*] Enable Scrollback Buffer in System RAM (64) Scrollback Buffer Size (in KB) (80) Initial number of console screen columns (25) Initial number of console screen rows -*- Framebuffer Console support -*- Map the console to the primary display device [ ] Framebuffer Console Rotation [*] Support for the Framebuffer Console Decorations [*] Bootup logo --->
Ну-с, вроде всё. Теперь перейдём к теме яркости. Почему-то у меня из коробки не работают кнопки увеличения и уменьшения яркости. Т.е. они, конечно, работают как кнопки, но яркость не меняют. Проверим для начала, определяет ли система нажатие на эти кнопки. Для этого запустим acpi_listen и пожмакаем. Должно появиться примерно следующее:
# acpi_listen video/brightnessdown BRTDN 00000087 00000000 K video/brightnessdown BRTDN 00000087 00000000 video/brightnessup BRTUP 00000086 00000000 video/brightnessup BRTUP 00000086 00000000 K ^CЕсли этого не произошло, идём смотреть ядро:
Device Drivers > X86 Platform Specific Device Drivers <*> Dell Laptop Extras <*> Dell Latitude freefall driver (ACPI SMO88XX) <M> Intel PMC IPC Driver Power management and ACPI options > [*] Suspend to RAM and standby [*] Hibernation (aka 'suspend to disk') () Default resume partition [ ] Opportunistic sleep [ ] User space wakeup sources interface -*- Device power management core functionality [ ] Power Management Debug Support [ ] Enable workqueue power-efficient mode by default [*] ACPI (Advanced Configuration and Power Interface) Support ---> --- ACPI (Advanced Configuration and Power Interface) Support [ ] AML debugger interface (EXPERIMENTAL) [ ] Deprecated power /proc/acpi directories [*] Allow supported ACPI revision to be overriden < > EC read/write access through /sys/kernel/debug/ec <*> AC Adapter <*> Battery {*} Button {*} Video {*} Fan [*] Dock <*> Processor < > Processor Aggregator <*> Thermal Zone -*- NUMA support [ ] ACPI tables override via initrd [ ] Debug Statements [ ] PCI slot detection driver -*- Container and Module Devices <*> Smart Battery System < > Hardware Error Device < > Allow ACPI methods to be inserted/replaced at run time <M> ACPI NVDIMM Firmware Interface Table (NFIT) [ ] ACPI Platform Error Interface (APEI) [ ] PMIC (Power Management Integrated Circuit) operation region support ---- [*] SFI (Simple Firmware Interface) Support ---- CPU Frequency scaling ---> CPU Idle ---> [*] Cpuidle Driver for Intel Processors Memory power savings ---> <*> Intel chipset idle memory power saving driverЭто должно помочь.
Также, у вас должен быть в системе следующий путь:
/sys/class/backlight/intel_backlight/В директории /sys/class/backlight вы также можете обнаружить под-директорию dell_backlight . Скорее всего вы что-то перемудрили с настройками. В целом - то, что эта папка есть, нет ничего страшного, ведь что там не меняй - подсведка меняться не будет.
Если кнопки определились, то пропишем правило скрипту ACPI. Тут привожу скрипт(ы) в полном варианте. Изменённые секции выделены красным.
# vim /etc/acpi/default.sh
#!/bin/sh
# /etc/acpi/default.sh
# Default acpi script that takes an entry for all actions
set $*
group=${1%%/*}
action=${1#*/}
device=$2
id=$3
value=$4
log_unhandled() {
logger "ACPI event unhandled: $*"
}
case "$group" in
button)
case "$action" in
power)
/etc/acpi/actions/powerbtn.sh
;;
*) log_unhandled $* ;;
esac
;;
ac_adapter)
case "$value" in
*) log_unhandled $* ;;
esac
;;
video)
case "$action" in
brightnessdown)
/etc/acpi/actions/brightness.sh -
;;
brightnessup)
/etc/acpi/actions/brightness.sh +
;;
*) log_unhandled $* ;;
esac
;;
*) log_unhandled $* ;;
esac
Ну и сделаем для этого ещё один скрипт:# vim /etc/acpi/actions/brightness.sh #!/bin/bash bl_dev=/sys/class/backlight/intel_backlight/ step=10 #set case $1 in -) echo $(($(< $bl_dev/brightness) - $step)) >$bl_dev/brightness ;; +) echo $(($(< $bl_dev/brightness) + $step)) >$bl_dev/brightness ;; esacИ тут вы можете заметить, что т.к. в acpi_listen одно нажатие кнопки определялось двумя ивентами ACPI, то и изменение яркости будет происходить с двойной силой. Итого, устанавливая step=10 он фактически будет отрабатывать 20-ку. Ну и ладно. Я вот ставил step=1 и сначала думал, что изменение яркости вообще не происходит. 10 - это норма ;)
# chmod +x /etc/acpi/actions/brightness.sh
А чтобы два раза не вставать, настроим заодно и поведение кнопки sleep. Я постоянно пользуюсь утилитой pm-suspend и хотел бы отправлять в сон ноут по одному клику. Для начала установим пакет, содержащий pm-suspend.
# emerge sys-power/pm-utilsПосмотрим, как эта кнопка определяется системой:
# acpi_listen button/sleep SBTN 00000080 00000000 K ^CВсё вроде хорошо. Осталось модифицировать наш скрипт.
# cat /etc/acpi/default.sh
#!/bin/sh
# /etc/acpi/default.sh
# Default acpi script that takes an entry for all actions
set $*
group=${1%%/*}
action=${1#*/}
device=$2
id=$3
value=$4
log_unhandled() {
logger "ACPI event unhandled: $*"
}
case "$group" in
button)
case "$action" in
power)
/etc/acpi/actions/powerbtn.sh
;;
# if your laptop doesnt turn on/off the display via hardware
# switch and instead just generates an acpi event, you can force
# X to turn off the display via dpms. note you will have to run
# 'xhost +local:0' so root can access the X DISPLAY.
#lid)
# xset dpms force off
# ;;
sleep)
/usr/sbin/pm-suspend
;;
*) log_unhandled $* ;;
esac
;;
ac_adapter)
case "$value" in
# Add code here to handle when the system is unplugged
# (maybe change cpu scaling to powersave mode). For
# multicore systems, make sure you set powersave mode
# for each core!
#*0)
# cpufreq-set -g powersave
# ;;
# Add code here to handle when the system is plugged in
# (maybe change cpu scaling to performance mode). For
# multicore systems, make sure you set performance mode
# for each core!
#*1)
# cpufreq-set -g performance
# ;;
*) log_unhandled $* ;;
esac
;;
video)
case "$action" in
brightnessdown)
/etc/acpi/actions/brightness.sh -
##echo $group - $action - $device - $id - $id>> /tmp/1.sh
;;
brightnessup)
/etc/acpi/actions/brightness.sh +
##echo $group - $action - $device - $id - $id>> /tmp/1.sh
;;
*) log_unhandled $* ;;
esac
;;
*) log_unhandled $* ;;
esac
На этом всё.Ссылки:
https://wiki.archlinux.org/index.php/acpid
https://wiki.gentoo.org/wiki/ACPI
Тонны благодарности тебе! :)
ОтветитьУдалитьЗавёл кнопки яркости на ideapad u430p