Hatred's Log Place

DON'T PANIC!

May 4, 2023 - 2 minute read - programming projects

Qt Creator & CMake: завезли добавление/удаление/переименование файлов

Итак, обновляю свой CMakeProjectManager2 и что я вижу:

  • 71eb0ab9f8e98df9bd021c1c49d7ec00a66492cb - завезли парсер CMake в стоковый плагин.
  • d41365610ff80478d8c6c2812299d95d139561ec - его интегрировали в билд.
  • d8be2491a5f5cfdc512f63c766a550dd43694063 / 13 апреля 2023 - реализовали добавление новых и существующих файлов к таргету, причём файл пытается добавляться прямо в CMakeLists.txt: файл будет добавлен последним элементов к соответствующей “well-known” функции (они захардкожены) типа add_executable(), add_library(), qt_add_executable(), qt_add_library(), qt6_add_executable(), qt6_add_library(). Для кастомных функций будет добавлен вызов target_sources(), что тоже неплохо. Уже можно начинать пользоваться.
  • 039baab6e70160bc8130ef95e499141f7c875225 / 20 апреля 2023 - реализовали вышеперечисленное для QtQuick проектов, в список “well-known” функций добавились: qt_add_qml_module(), qt6_add_qml_module()
  • 54af6bd5b3f5ba5e3396f5cb9eb539f198abafff / 21 апреля 2023 - разрешили переименовывать файлы. Работает как для явно указанных файлов, так и для добавленных через file(GLOB|GLOB_RECOURSE).
  • 411b2e05b8ac4442d1ef179381dc7c37492ab37b / 24 апреля 2023 - разрешили удалять файлы.
  • 5c2b2966e78129dcbd220e35e15f6278a1b3d05d / 27 апреля 2023 - разрешили добавлять существующую директорию. Пока, как я понял, добавляются все файлы, а не add_subdirectory(). Что, по мне, более логично: все операции target-ориентированные.
  • 874b1133d9cfaef179851aa925b7d6b96e85019b / 26 апреля 2023 - пофиксили удаление и переименование, что бы оно срабатывало и с файлами, которые указываются через переменные для таргета.

Ну и пачка мелких фиксов.

На текущий момент, меня огорчает отсутствие вывода всех файлов их проектной директории (например, README.md или скрипты вспомогательные, которые вполне можно редактировать в QtC), но уже можно начинать пытаться нормально работать.

Собственно в рамках CMakeProjectManager2 я теперь попытаюсь реализовать возможность отобразить всех файлов, по аналогии с текущей реализацией и подключить добавление файлов из апстрима.

А вообще, тенденция к тому, что CMakeProjectManager2 можно будет выкинуть меня радует!

Apr 14, 2023 - 1 minute read - programming C++

[C++] std::tie() и range for

Сегодня мне не хватило такого (C++20):

for (std::tie(m_imageWidth, m_imageHeigth) : sizes) {}

Пришлось так:

for (auto const &size : sizes) {
    std::tie(m_imageWidth, m_imageHeigth) = size;
}

Mar 31, 2023 - 1 minute read - memo

Display Technology Information Repository and Utilities

В мемориз:

Подборка полезный утилит и стандартов связанных с дисплеями: HDMI, DP:

К сожалению, свежие стандарты HDMI 2.0, 2.1 чувака заставили удалить из публичного доступа (почитайте письмо, которое ему написали).

Помимо этого есть спеки ITU/BT - там можно поискать коэффициенты RGB-YUV конвертаций для различных режимов (Rev.601 vs Rec.709 vs BT.2020, а вот про BT.2100 я уже не слышал) - бывает полезно (наипался, когда программировали матричный pCSC).

Офигенный раздел по кабелям и переходникам:

и его “продакшн” версия:

Так же раздел, для расчёта параметров монитора (например, DPI) по разрешению и диагонали:

Mar 31, 2023 - 1 minute read - memo

Online Tone Generator

В мемориз.

Предыстория: досталась Б/У “железная” дорога Tomica (японческий оригинал), а там оказался один локомотив, у которого два варианта управления:

  1. Пультом
  2. Свистком

Пульта, понятное дело, не нашлось. Изучая логотип свистка и помедитировав на картинки с этим локомотивом, где изображён этот самый свисток, сначала своим свистом попытался запустить, что через минут 15 удалось… Представьте себе картину маслом: сидит взрослый человек, и свистит на игрушечный тепловоз. Понравилось? :)

А потом решил поискать какой-то генератор тона, что бы более точно подобрать частоту.

Собственно в мемориз:

Mar 25, 2023 - 2 minute read - Linux Thinkpad

Thinkpad P15 Gen2: ноутбук не уходит в сон и фризится lspci при питании от батареи

Проблема: при питании от батареи, время от времени не можем уйти в сон. После чего наблюдаем:

  • фриз при вызове lspci
  • фриз при попытке сделать sudo
  • фриз при попытке перегрузиться или выключиться
  • фриз при запуске sddm, если включаться на батарее
  • 100% и стабильное воспроизведение при запуске sudo powertop, и тоже фриз

Mar 19, 2023 - 2 minute read - Linux

ArchLinux: сохранение модулей текущего ядра при обновлении

Проблема: когда мы в ArchLinux и производных дистрибутивах обновляем ядро и если поменялась минорная цифра сменилась, то меняется и директория для модулей, а старая удаляется. В результате чего после обновления вы или сразу должны перезагрузиться с новым ядром или получать эпичные глюки: флешка там не примонтируется или ещё чего.

Очевидное решение: временно сохранить текущую диреторию для ядра. Почистить потом можно, на загрузке, к примеру.

Решение ниже - хуки для pacman, которое это делают.

Mar 19, 2023 - 1 minute read - Linux

dmesg wheel group access

На системах с ядром 5.10.4+ dmesg доступен только для root. Делаем его доступным и для группы wheel и, по необходимости, добавляем туда пользователей. К слову, если не уверены, лучше не делайте. Мне в dmesg нужно очень часто во время разработки лезть. Можно в терминале запускать сессию от другого пользователя без привилегий, но в группе wheel:

mkdir -p /etc/pacman/hooks
cat > /etc/pacman/hooks/10-dmesg-wheel-access.hook << EOF
[Trigger]  
Operation = Upgrade  
Type = Package  
Target = util-linux  
  
[Action]  
Description = Allow dmesg wheel access...  
When = PostTransaction  
Exec = /bin/sh -c '/usr/bin/chown root:wheel /usr/bin/dmesg ; /usr/bin/chmod 750 /usr/bin/dmesg ; /usr/bin/setcap cap_syslog=ep /usr/bin/dmesg'
EOF

Mar 19, 2023 - 1 minute read - Linux Thinkpad

Thinkpad P15 Gen2: LEDs

А оказывается, что почти всеми (скорее вообще всеми) LED, которые присутствуют на этом лаптопе можно управлять через sysfs:

$ ls /sys/devices/platform/thinkpad_acpi/leds/ -1  
platform::micmute  
platform::mute  
tpacpi::kbd_backlight  
tpacpi::lid_logo_dot  
tpacpi::power  
tpacpi::standby  
tpacpi::thinklight  
tpacpi::thinkvantage

Основные контрольные файлы:

  • brightness - собственно для включения или выключения: 0 - выключить. Максимальное значение зависит от следующего параметра.
  • max_brightness - максимальное значение для предыдущего параметра. Если 1, то LED работает как On/Off. Если отличное, то поддерживается установка яркости: максимальное значение - максимальная яркость.
  • trigger - можно задать системный триггер, который будет управлять этим LED. Типичный пример - активность жёсткого диска. Чтение из файла: список доступных триггеров и выбранный триггер, запись - назначение триггера.

Но вот я ни один LED не смог настроить на системный триггер disk-activity.

К слову, LED на крешке в букве i в Thinkpad:

  • /sys/devices/platform/thinkpad_acpi/leds/tpacpi::lid_logo_dot/

Mar 19, 2023 - 2 minute read - Linux Thinkpad

Thinkpad P15 Gen2: отключаем ненужные WakeUp sources

Проблема: просыпается при шевелинии мышкой Logitech MX Master, Unify receiver подключен в правый USB TypeA порт.

Старый метод через /proc/acpi/wakeup работает не для всех устройств:

cat /proc/acpi/wakeup | grep enabled | awk '{print($1)}' | grep -v 'SLPB\|LID' | while read line; do echo $line | sudo tee; done

Читаем:

Просканировать прочие устройства:

find /sys/devices -name 'wakeup' -a -type f | while read line; do sts=$(cat "$line"); echo "$line: $sts"; done | grep enabled

Сверяемся с выводом cat /proc/acpi/wakeup на предмет нужных устройств. К примеру, у меня:

/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/power/wakeup - LID
/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/power/wakeup - SLPB

И выключаем:

find /sys/devices -name 'wakeup' -a -type f | grep -v 'PNP0C0D:00\|PNP0C0E:00' | while read line; do echo 'disabled' | sudo tee "$line"; done

Отражение состояния в /proc/acpi/wakeup тоже будет.

Но есть нюанс: устройствам может прилететь change и они могут опять включить этот источник пробуждения. Или /etc/rc.local вызваться в момент, когда ещё не все устройства проинициализированы.

Окончательное “лечение” проблемы: через udev, как по ссылке выше. Для себя я составил такой /etc/udev/rules.d/99-wakeup.rules:

ACTION!="add|change|bind", GOTO="wakeup_disable_end"  
  
# Disable all by default  
SUBSYSTEM=="*", ATTR{power/wakeup}=="*", ATTR{power/wakeup}="disabled"  
  
# Enable for selected:  
  
# LID  
#   /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00  
#DEVPATH=="/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00", ATTR{power/wakeup}="enabled"  
KERNEL=="PNP0C0D:00", ATTR{power/wakeup}="enabled"  
  
# SLPB  
#   cat /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/uevent  
#DEVPATH=="/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00", ATTR{power/wakeup}="enabled"  
KERNEL=="PNP0C0E:00", ATTR{power/wakeup}="enabled"  
  
LABEL="wakeup_disable_end"

Краткое пояснение:

  1. Реагируем только на действия add, change, bind
  2. По умолчанию, для все подсистем, у которых есть атрибут power/wakeup выставляем его в disable
  3. После чего, включаем только нужные источники пробуждения, у меня это LID и SLPB/WakeUp button.

Далее варианты:

  1. Перегрузиться - самый простой
  2. Вручную перегрузить правила (sudo udevadm control -R) и стригерить каждое устройство:
    sudo udevadm trigger /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00
    
  3. Так же перечитать правила и вызвать однострочник выше, а если уж прилетит change action, то уже отработается правилами udev.

В общем, какой удобнее - тот и использовать.

Mar 18, 2023 - 1 minute read - life

RIP

16.03.2016, Жека, помним.

bertolet.jpg

Mar 15, 2023 - 1 minute read - Linux Thinkpad

Thinkpad P15 Gen2: падение VLC и проблемы с VDPAU/VA-API

Проблема: VLC при попытке проиграть видео падает:

libva error: /usr/lib/dri/i965_drv_video.so init failed  
[00007f437c007840] glconv_vaapi_x11 gl error: vaInitialize: unknown libva error  
libva error: /usr/lib/dri/i965_drv_video.so init failed  
[00007f437c007840] glconv_vaapi_drm gl error: vaInitialize: unknown libva error  
libva error: /usr/lib/dri/i965_drv_video.so init failed  
[00007f437c007840] glconv_vaapi_drm gl error: vaInitialize: unknown libva error

А vdpauinfo говорит:

libva error: /usr/lib/dri/i965_drv_video.so init failed

И рапортует, что не поддерживает ничего.

Решение: поставить новый драйвер от Intel и не забыть бридж VA-API → VDPAU:

sudo pacman -S intel-media-driver libvdpau-va-gl

Старый libva-intel-driver работал для графики на T530, но тут уже нет. В целом, наверное, его можно удалить.

После установки успешно отрабатывает и VLC, vdpauinfo и vainfo.

Для надёжности, наверное, стоит ещё задать:

# VA API (Firefox)
export LIBVA_DRIVER_NAME=iHD
# VDPAU
export VDPAU_DRIVER=va_gl

К слову, vainfo рапортует много больше возможностей по декодированию, по сравнению с vdpauinfo. Вики Debian говорит что он действительно более ограничен, но иногда (не наш случай), это единственный вариант. В общем, с учётом того, что тот же Firefox для аппаратного декодирования использует VAAPI и что последний более богат - это не может не радовать.

Для дополнительного чтения:

Mar 14, 2023 - 7 minute read - Linux Thinkpad

Thinkpad P15 Gen2: гибридная графика

Карта у меня стоит далеко не топовая:

nVidia T1200
$ lspci -nn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation TigerLake-H GT1 [UHD Graphics] [8086:9a60] (rev 01)
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117GLM [T1200 Laptop GPU] [10de:1fbc] (rev a1)

Карта поколения NV160 family (Turing). Это будет важно в дальнейшем.

Первое, у нас, аналогично T530 (там правда mDP, а VGA - на встроенную карту, но тут VGA нет /дополнительный порт - через TypeC/), HDMI разведён на дискретную карту. Соответственно нельзя использовать её без настройки оной.

Второе, эта карта поддерживается открытым ядерными драйверами от самой nvidia: nvidia-open / nvidia-open-dkms. К сожалению, самих драйверов не завезли в репозитории Manjaro (тогда как в ArchLinux они есть). Ставим beta или git из AUR.

Внешний монитор на HDMI

Главное - удалить пакет bumblebee: он блеклистит как драйвера нуво (nouveau), так и официальный драйвера nVidia.

При этом, при загруженной системе выход на HDMI работает как с открытыми драйверами nouveau из коробки, так и с закрытыми драйверами.

Для нуво ничего, собственно, делать не нужно, единственно, стоит удалить xf86-video-nouveau, так для карт поколения NVC50+ рекомендую использовать встроенный modeset.

Для проприетарных - ниже.

Для того, что бы средствами обычного xrandr/DRM внешний порт нормально цеплялся:

  1. Удалить bumblebee
  2. Добавить в загрузку nvidia_drm (не обязательно, при удалённом bumblebee он и сам загрузится)
  3. Добавить параметр nvidia_drm.modeset=1 (я сделал через параметры модулей)

Для загрузки модуля, пишем в /etc/modules-load.d/modules.conf:

# List of modules to load at boot  
nvidia_drm

TBD:

  • nvidia
  • nvidia_drm
  • nvidia_uvm
  • nvidia_modeset

Для параметров, создаём файл /etc/modprobe.d/nvidia.conf:

options nvidia_drm modeset=1

Это автоматически подгрузит и nvidia_modeset.

Всё, после чего у нас всё магическим образом заработает:

$ xrandr --listproviders
Providers: number : 2  
Provider 0: id: 0x49 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 4 outputs: 7 associated providers: 1 name:modesetting  
Provider 1: id: 0x2a2 cap: 0x2, Sink Output crtcs: 4 outputs: 5 associated providers: 1 name:NVIDIA-G0

А в KDE Plasma по Fn+F7 будет работать выбор режима расширения экрана при подключенном внешнем мониторе.

PRIME

В отличии от HDMI выхода, драйвера nouveau не работают от слова совсем. Ошибка. TBD: добавить вывод ошибки.

Поэтому рассматриваем только официальные драйвера.

Ставим:

$ sudo pacman -S nvidia-prime

Проверяем:

$ prime-run glxinfo | grep "OpenGL renderer"
OpenGL renderer string: NVIDIA T1200 Laptop GPU/PCIe/SSE2

По сути, он просто задаёт нужные переменные окружения:

Настройки для внешнего монитора должны быть сделаны.

Power Management

Как говорится тут для новейших карт Ampere ничего делать не нужно, а наша Turing мы можем полностью отключить карту, когда она не используется. Нужно создать udev правила /etc/udev/rules.d/80-nvidia-pm.rules:

# Enable runtime PM for NVIDIA VGA/3D controller devices on driver bind
ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="auto"
ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030200", TEST=="power/control", ATTR{power/control}="auto"

# Disable runtime PM for NVIDIA VGA/3D controller devices on driver unbind
ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="on"
ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030200", TEST=="power/control", ATTR{power/control}="on"

И добавить параметры для главного модуля nvidia:

options nvidia "NVreg_DynamicPowerManagement=0x02"

Затем включить сервис nvidia-persistenced.service:

sudo systemctl enable nvidia-persistenced.service

Проблемы

Зависает ядро

Точнее так, это не беда nVidia, это беда только на процессорах 11gen от Intel, который, собственно у меня и стоит:

Сама проблема описана тут:

nvidia may not boot on Linux 5.18 (or later) on systems with Intel CPUs (likely only of 11th Gen and onward) due to FS#74886/ FS#74891. Until this is fixed, a workaround is disabling the Indirect Branch Tracking CPU security feature by setting the ibt=off kernel parameter from the boot loader. This security feature is responsible for mitigating a class of exploit techniques, but is deemed safe as a temporary stopgap solution.

У меня аффектит в том числе и работу Virtual Box:

[  456.563262] SUPR0GipMap: fGetGipCpu=0x1b  
[  457.249272] traps: Missing ENDBR: 0xffffacace3a50c20  
[  457.249303] ------------[ cut here ]------------  
[  457.249304] kernel BUG at arch/x86/kernel/traps.c:255!  
[  457.249308] invalid opcode: 0000 [#1] PREEMPT SMP NOPTI  
[  457.249312] CPU: 14 PID: 6732 Comm: EMT-0 Tainted: G           OE      6.1.12-1-MANJARO #1 d419fb51ba9431ae2a4575820ea6b5b95f50a34f  
[  457.249314] Hardware name: LENOVO 20YQ0058RT/20YQ0058RT, BIOS N37ET39W (1.20 ) 04/15/2022  
[  457.249315] RIP: 0010:exc_control_protection+0xc2/0xd0  
[  457.249320] Code: fa ff 45 31 c9 49 89 d8 b9 09 00 00 00 48 8b 93 80 00 00 00 be fc 00 00 00 48 c7 c7 09 4e 44 b9 e8 c3 84 46 ff e9 64 ff ff ff <0f> 0b 66 66 2e 0f 1f 84 00 00 00 00 00 9  
0 66 0f 1f 00 55 53 48 89  
[  457.249321] RSP: 0018:ffffacace1cf7c38 EFLAGS: 00010002  
[  457.249323] RAX: 0000000000000028 RBX: ffffacace1cf7c58 RCX: 0000000000000000  
[  457.249324] RDX: 0000000000000000 RSI: ffff8afd1f7a1660 RDI: ffff8afd1f7a1660  
[  457.249325] RBP: 0000000000000003 R08: 0000000000000000 R09: ffffacace1cf7ad0  
[  457.249325] R10: 0000000000000003 R11: ffffffffb9ccc7e8 R12: 0000000000000000  
[  457.249326] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000  
[  457.249327] FS:  00007fe0241fd6c0(0000) GS:ffff8afd1f780000(0000) knlGS:0000000000000000  
[  457.249328] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033  
[  457.249329] CR2: ffffacace38c5b10 CR3: 00000002ac0d0006 CR4: 0000000000f70ee0  
[  457.249330] PKRU: 55555554  
[  457.249331] Call Trace:  
[  457.249333]  <TASK>  
[  457.249335]  asm_exc_control_protection+0x26/0x30  
[  457.249337] RIP: 0010:0xffffacace3a50c20  
[  457.249339] Code: 16 9d e6 ff 4c 89 e7 89 c3 e8 7c 94 e6 ff 85 db 0f 48 c3 5b 41 5c 5d c3 66 90 b8 fe ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 <83> fe 0f 77 53 55 83 ce 10 48 89 e5 53 4  
8 89 fb 48 8d 7f 18 48 83  
[  457.249340] RSP: 0018:ffffacace1cf7d08 EFLAGS: 00010246  
[  457.249341] RAX: 0000000000000000 RBX: ffffacace2219010 RCX: 0000000000000001  
[  457.249342] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffacace2219030  
[  457.249343] RBP: ffffacace1cf7de0 R08: ffffacace3a5b95d R09: ffffacace2219010  
[  457.249343] R10: ffffacace226a000 R11: 0000000000000000 R12: ffff8af9c6c79a10  
[  457.249344] R13: ffffffffc0bffce0 R14: 0000000000000004 R15: ffff8af9c6c79a10  
[  457.249346]  ? asm_exc_page_fault+0x26/0x30  
[  457.249348]  ? supdrvIOCtl+0x2d77/0x31b0 [vboxdrv 2ebee49653aba23a54dbd683c8be87cd93f03860]  
[  457.249364]  ? _copy_from_user+0x47/0x60  
[  457.249368]  ? VBoxDrvLinuxIOCtl_7_0_6+0x162/0x260 [vboxdrv 2ebee49653aba23a54dbd683c8be87cd93f03860]  
[  457.249376]  ? do_syscall_64+0x6b/0x90  
[  457.249378]  ? __x64_sys_ioctl+0x91/0xd0  
[  457.249381]  ? do_syscall_64+0x5c/0x90  
[  457.249382]  ? exc_page_fault+0x74/0x170  
[  457.249384]  ? entry_SYSCALL_64_after_hwframe+0x63/0xcd  
[  457.249385]  </TASK>  
[  457.249386] Modules linked in: snd_seq_dummy snd_seq snd_seq_device ccm rfcomm qrtr cmac algif_hash algif_skcipher af_alg bnep btusb uvcvideo btrtl videobuf2_vmalloc btbcm videobuf2_memo  
ps btintel videobuf2_v4l2 btmtk videobuf2_common videodev bluetooth mc ecdh_generic joydev mousedev snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_pr  
obes snd_hda_codec_realtek snd_hda_codec_generic snd_soc_dmic snd_sof_pci_intel_tgl snd_sof_intel_hda_common soundwire_intel soundwire_generic_allocation soundwire_cadence snd_sof_intel_hda  
snd_sof_pci snd_sof_xtensa_dsp intel_tcc_cooling snd_sof snd_sof_utils x86_pkg_temp_thermal snd_soc_hdac_hda intel_powerclamp snd_hda_ext_core coretemp snd_soc_acpi_intel_match kvm_intel s  
nd_soc_acpi vfat fat soundwire_bus kvm snd_soc_core iwlmvm irqbypass crct10dif_pclmul snd_compress crc32_pclmul ac97_bus polyval_clmulni snd_hda_codec_hdmi snd_pcm_dmaengine polyval_generic  
gf128mul ghash_clmulni_intel mac80211 sha512_ssse3  
[  457.249418]  snd_hda_intel aesni_intel processor_thermal_device_pci_legacy snd_intel_dspcfg crypto_simd snd_intel_sdw_acpi processor_thermal_device cryptd libarc4 mei_hdcp mei_pxp snd_hd  
a_codec processor_thermal_rfim iTCO_wdt rapl nouveau iwlwifi snd_hda_core spi_nor intel_pmc_bxt processor_thermal_mbox snd_hwdep mei_me intel_cstate iTCO_vendor_support ee1004 intel_rapl_ms  
r ucsi_acpi processor_thermal_rapl think_lmi snd_pcm intel_uncore cfg80211 psmouse pcspkr firmware_attributes_class mtd wmi_bmof typec_ucsi i2c_i801 mxm_wmi igc mei intel_rapl_common thunde  
rbolt snd_timer drm_ttm_helper i2c_smbus typec intel_soc_dts_iosf roles int3400_thermal int3403_thermal acpi_thermal_rel int340x_thermal_zone intel_hid acpi_pad sparse_keymap acpi_tad mac_h  
id dm_multipath dm_mod vboxnetflt(OE) vboxnetadp(OE) vboxdrv(OE) sg crypto_user fuse acpi_call(OE) bpf_preload ip_tables x_tables ext4 crc32c_generic crc16 mbcache jbd2 rtsx_pci_sdmmc mmc_c  
ore nvme thinkpad_acpi nvme_core crc32c_intel spi_intel_pci  
[  457.249452]  xhci_pci serio_raw rtsx_pci ledtrig_audio spi_intel nvme_common xhci_pci_renesas atkbd platform_profile libps2 snd vivaldi_fmap soundcore i8042 rfkill serio i915 drm_buddy i  
ntel_gtt video wmi drm_display_helper cec ttm  
[  457.249462] ---[ end trace 0000000000000000 ]---  
[  457.249463] RIP: 0010:exc_control_protection+0xc2/0xd0  
[  457.249465] Code: fa ff 45 31 c9 49 89 d8 b9 09 00 00 00 48 8b 93 80 00 00 00 be fc 00 00 00 48 c7 c7 09 4e 44 b9 e8 c3 84 46 ff e9 64 ff ff ff <0f> 0b 66 66 2e 0f 1f 84 00 00 00 00 00 9  
0 66 0f 1f 00 55 53 48 89  
[  457.249466] RSP: 0018:ffffacace1cf7c38 EFLAGS: 00010002  
[  457.249467] RAX: 0000000000000028 RBX: ffffacace1cf7c58 RCX: 0000000000000000  
[  457.249468] RDX: 0000000000000000 RSI: ffff8afd1f7a1660 RDI: ffff8afd1f7a1660  
[  457.249468] RBP: 0000000000000003 R08: 0000000000000000 R09: ffffacace1cf7ad0  
[  457.249469] R10: 0000000000000003 R11: ffffffffb9ccc7e8 R12: 0000000000000000  
[  457.249469] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000  
[  457.249470] FS:  00007fe0241fd6c0(0000) GS:ffff8afd1f780000(0000) knlGS:0000000000000000  
[  457.249471] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033  
[  457.249472] CR2: ffffacace38c5b10 CR3: 00000002ac0d0006 CR4: 0000000000f70ee0  
[  457.249473] PKRU: 55555554

В выхлопе nVidia тоже будет присутстввать:

traps: Missing ENDBR: 0xffffacace3a50c20  

Решение: добавить параметр ibt=off для ядра.

Открываем /etc/default/grub и добавляем:

GRUB_CMDLINE_LINUX_DEFAULT="... ibt=off ...

После чего:

sudo update-grub

и перезагрузка.

Не запускается SDDM

У меня такое на дровах из репозитория. Поставил nvidia-open-beta - проблема ушла.

Особенности

Кто кого блеклистит и когда.

Первое, пакет nvidia-utils содержит в себе конфиги для modprobe (/usr/lib/modprobe.d/nvidia-utils-beta.conf), который блеклистит nouveau. Имейте ввиду.

Второе, как было сказано выше, bumblebee блеклистит походим образом как nouveau, так и официальные драйвера. Внесение в чёрный список защищает от автоматической загрузки, а принудительно загрузить всё так же можно. Чем bumblebee и пользуется для организации offloading.

Далее, данные о блеклистинге попадают в том числе в initramfs, поэтому, вцелом, на гибридной графике можно не отказываться от kms - нуво всё равно не загрузится при наличии проприетарных драйверов, только если вы сами этого явно не скажите.

Ссылки

Mar 10, 2023 - 2 minute read - Linux Thinkpad

Thinkpad P15gen2: клавиатура, Menu, SysReq, Launch2

Для начала, методики (но не конечные решения!) описанные в прошлых связанных статьях для Thinkpad T530 вполне себе работают, поэтому стоит начать с ознакомления с ними:

Официальные Fn+ комбинации

Комбинации для T530 работают и ровно в такой же механике. Вообще вот руководство, так сказать первоисточники, где это всё описано:

Для начала небольшие пояснения для следующих кнопок:

Комбинация Название Код
Fn+F9 Открытие/свёртывание центра уведомлений XF86Messager
Fn+F10 Принятие входящих вызовов в Microsoft Teams XF86Go
Fn+F11 Отклонение входящих вызовов в Microsoft Teams Cancel
Fn+F12 Настраиваемая XF86Favorites

Все кнопки отлично распознаются и можно куда-то назначить.

А вот теперь более интересные:

Комбинация Название Код Примечание
Fn+PrtSc Открытие инструмента «Ножницы» Launch2 Т.е. на самом деле - обычная кнопка общего назначения
Fn+4 Спящий режим XF86Sleep В дополнение к основной
Fn+Left Переход к началу Home Это просто подарок для навигации какой-то
Fn+Right Переход в конец End См выше

Для работы с SysReq - смотрите прошлую заметку для T530.

Управление громкостью, отключением микрофона, динамиков, управление яркостью дисплея, отключения WiFi, уход в сон и пробуждение (однократное нажатие Fn) - как минимум в KDE Plasma заработало из коробки в том числе с сопутствующими OSD.

Делаем Menu из Fn+PrtSc aka Launch2

По аналогии как тут:

Что хорошо, за весь срок существования заметок и 10 лет существования ноутбука, даже номера event не поменялись: для встроенной клавиатуры остался 3, для Fn+ - 5.

На P15gen2 я решил не переносить PrtSc, так как отдельной кнопки Launch1 больше нет, но так как на этой же кливише появилась альтернативная функция, то решил из неё как раз сделать Menu. Все действия уже описаны, результирующий /etc/udev/hwdb.d/70-keyboard.hwdb получился такой:

# thinkpad_acpi driver  
evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*  
  KEYBOARD_KEY_46=compose                                  # Override Launch2 (prog2) to Menu (Compose): on the TP P15gen2 - Fn+PrtScr

Прочие Fn клавиши тоже можно переназначить по желанию. Главное его заиметь или придумать, куда приспособить. Я пока не придумал.

Jan 9, 2023 - 9 minute read - Туризм

Траверс Суходол-Туманная 2023

Снега в декабре в городе навалило так, что до сих пор аукается на дорогах Владивостока, поэтому возникло жгучее желание сходить потропить наши хребты в снегоступах. Кинул клич, в ответку от Коли Живова получил контр-приглашение на снегоступинг 7-8 января, но 8 были уже запланированы мероприятия, которые ну никак не получалось перенести. В результате согласились идти 4-5 января Саня, Юра и Макс. Но 3 числа Саня отвалился - внезапно заболел. Остался я, Макс и Юрка. Так и пошли.

Перечитывая С юга на север по Ливадийскому хребту при планировании маршрута разогнался на 40 км за два дня, маршрут:

74км-г.Суходол-хр.Большой Воробей-г.Туманная-р.Тигровая-(выход рядом)Бровничи-Фридман

Резервными вариантами рассматривал выход:

  1. в Тигровой
  2. по классике на 82км

Результат вышел куда более скромным, но не менее греющим душу:

74км-г.Суходол-хр.Большой Воробей-г.Туманная-серпантин-82км

map