Карта у меня стоит далеко не топовая:
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 внешний порт нормально цеплялся:
- Удалить bumblebee
- Добавить в загрузку
nvidia_drm
(не обязательно, при удалённом bumblebee он и сам загрузится) - Добавить параметр
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 - нуво всё равно не загрузится при наличии проприетарных драйверов, только если вы сами этого явно не скажите.
Ссылки
- https://wiki.archlinux.org/title/PRIME#PRIME_render_offload
- https://wiki.archlinux.org/title/NVIDIA
- https://forums.developer.nvidia.com/t/nvidia-hybrid-laptop-settings/209466
- https://stackoverflow.com/questions/17196117/disable-vertical-sync-for-glxgears
- https://forums.developer.nvidia.com/t/nvidia-hybrid-laptop-settings/209466