页次: 1
电脑配置如下:
电脑名:ROG Flow Z13 GZ301ZC
内核:6.5.7zen
CPU:i712700H
GPU:NVIDIA Geforce RTX 3050 Mobile
RAM:16G
固态硬盘
btrfs文件系统
archlinux,手动安装
使用paru作为aur助手
使用了nvidia-open-dkms驱动(我玩游戏,nouveau不咋不能)
已经过baidu,bing均无法解决
在使用的时候大概是使用paru安装了xorg-drivers(当时也装了libinput-gestures不过感觉关系不大)然后重启了,然后GDM里面一切Wayland的桌面没了,然后进入桌面,一些个性化图标也消失了。我之前是设置过gdm显示Wayland的,在这之前使用xorg都没有问题,最多最多也就卡一下
但是现在,当我登陆GNOME x11时所有打开的gtk应用都会被冻结,点击不会有任何操作,nautils空白等。
我还切换到了KDE Plasma桌面,一些qt(应该是吧?毕竟我没接触过)应用能打开,但是任务栏图标会闪来闪去,桌面壁纸消失且设置菜单冻结无法打开。
现在只能通过tty打开备备备选hyprland来用一下
求大佬救急!!
虽然Wayland是可以用,但是有些软件需要在x11用,而且gdm可能还会在把wayland弄消失
如果有任何需要日志,profile文件等信息请告诉我
最近编辑记录 Rice (2023-10-14 10:58:49)
离线
如果你可以把出问题时的 journal 发出来的话,我可以帮你分析一些 gnome/gdm 相关的日志(kde 不懂)
在看到日志之前,我只能在你已提供的信息中指出几个问题:
安装了xorg-drivers
我觉得你应该用不到这么多的 drivers。nvidia 的用户空间驱动由 nvidia-utils 提供。
之前是设置过gdm显示Wayland的
目前,gnome 默认使用 wayland 作为显示协议。也许你的配置文件中存在一些不必要的配置
虽然Wayland是可以用,但是有些软件需要在x11用
Xwayland 现在已经很成熟了。若你遇到一些 X 程序无法在 Xwayland 中运行并且没有简单的 workarounds,那再切换回 Xorg 也不迟。
实际上,这是一个你迟早要面对的问题,因为 gnome 可能会在不久的将来终止对 X11 会话的支持
最近编辑记录 Mr.I (2023-10-14 06:11:29)
离线
我把xorg-drivers删干净了,只留了xf86-libinput一些输入设备驱动,貌似是之前按装xorg-drivers同时安装了 AMD 的驱动 和 Intel 与 NVIDIA 的开源驱动导致的,而且我还在initcpio.conf增加了nvidia的modules,所以可能导致了一系列冲突问题。
gdm的问题可以通过网上删除文件的办法解决。把/usr/lib/udev/rules.d/61-gdm.rules删除或者移动然后重启就可以登陆wayland会话了。
谢谢已解决
离线
把/usr/lib/udev/rules.d/61-gdm.rules删除或者移动然后重启就可以登陆wayland会话了
你这样搞,是会出事情的 ☠️
离线
会有什么影响吗
离线
因为你这么做破坏了 gdm 这个软件包的一部分逻辑啊,而且这个破坏还是非常不必要的,你看看 61-gdm.rules 里面写的注释:
# Disable wayland when nvidia modeset is disabled or when drivers are a lower
# version than 470,
# For versions above 470 but lower than 510 prefer Xorg,
# Above 510, prefer Wayland.
这个 udev 规则很可能不是导致你用不了 wayland 的罪魁祸首
最近编辑记录 Mr.I (2023-10-14 11:48:56)
离线
az,我看网上说是显卡不兼容(n卡的锅),不过我到没用出什么问题。而且sddm可以直接登陆,就gdm不可以。
离线
N 卡不兼容那是很久之前的事情了,gdm 自己都写了 nvidia >=510 首选 wayland
离线
我仔细看了一下 61-gdm.rules 之后找了一台 I卡+N卡 的笔记本试了一下,得出了一个比较合适的解决方案,如果你感兴趣的话,可以试试
61-gdm.rules 这个规则文件中含有多个阻止你使用 wayland 的检测,这些检测规则并不仅仅是简单的检测,同时它们也描述了 gdm 对于启用 wayland 所需的一些条件。
从包管理的角度考虑,用户不应该手动修改 /usr/lib/udev/rules.d 中的规则文件,所以,我们应该把 61-gdm.rules 文件复制到 /etc/udev/rules.d 中再对其进行修改。
/etc/udev/rules.d 中的 61-gdm.rules 文件将会起到覆盖 /usr/lib/udev/rules.d/61-gdm.rules 的作用。
以下我一一陈述各项校验和 wayland 的启用需求:
------------------------------------
1、gdm 不允许双显卡的笔记本使用 wayland:
# 61-gdm.rules 85 行
# If this is a hybrid graphics laptop with vendor nvidia driver, disable wayland
LABEL="gdm_hybrid_nvidia_laptop_check"
TEST!="/run/udev/gdm-machine-is-laptop", GOTO="gdm_hybrid_nvidia_laptop_check_end"
TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_hybrid_nvidia_laptop_check_end"
TEST!="/run/udev/gdm-machine-has-vendor-nvidia-driver", GOTO="gdm_hybrid_nvidia_laptop_check_end"
GOTO="gdm_disable_wayland"
LABEL="gdm_hybrid_nvidia_laptop_check_end"
此条无解,只能注释掉或是在 LABEL="gdm_hybrid_nvidia_laptop_check" 前面加上 GOTO 语句来跳过这块校验:
GOTO="gdm_hybrid_nvidia_laptop_check_end"
-------------------------------------------
2、gdm 会在没有启用 modesetting 的情况下禁用 wayland
# 61-gdm.rules 32 行
# disable Wayland if modesetting is disabled
KERNEL!="card[0-9]*", GOTO="gdm_nomodeset_end"
KERNEL=="card[0-9]-*", GOTO="gdm_nomodeset_end"
SUBSYSTEM!="drm", GOTO="gdm_nomodeset_end"
# but keep it enabled for simple framebuffer drivers
DRIVERS=="simple-framebuffer", GOTO="gdm_nomodeset_end"
IMPORT{parent}="GDM_MACHINE_HAS_VIRTUAL_GPU"
ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}!="1", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-hardware-gpu"
IMPORT{cmdline}="nomodeset", GOTO="gdm_disable_wayland"
LABEL="gdm_nomodeset_end"
你需要确保内核参数 nvidia-drm.modeset=1,这个可以直接加到内核命令行参数上。
你可以使用 (sudo) systool -vm nvidia_drm 命令来检查 nvidia modeset 是否被启用,如果已经启用,则 Parameters 块中的 modeset 的值为 "Y"
-----------------------------------------
3、gdm wayland 需要 nvidia 模块中的 NVreg_PreserveVideoMemoryAllocations 的值为 1
# 61-gdm.rules 54 行
IMPORT{program}="/bin/sh -c \"sed -e 's/: /=/g' -e 's/\([^[:upper:]]\)\([[:upper:]]\)/\1_\2/g' -e 's/[[:lower:]]/\U&/g' -e 's/^/NVIDIA_/' /proc/driver/nvidia/params\""
ENV{NVIDIA_PRESERVE_VIDEO_MEMORY_ALLOCATIONS}!="1", GOTO="gdm_disable_wayland"
这个参数与系统休眠过程中的显卡内存的临时存放有关,这个值默认为 0,所以需要用户手动配置该参数,配置如下:
在 /etc/modprobe.d 中创建一个 .conf 文件,文件内容:
options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=[你想要临时存放显存的目录,配置后记得创建对应目录]
该配置参考 wiki 条目:https://wiki.archlinux.org/title/NVIDIA/Tips_and_tricks#Preserve_video_memory_after_suspend
----------------------------------
4、gdm wayland 需要 enable nvidia 的休眠和唤醒服务
# 61-gdm.rules 56 行
IMPORT{program}="/bin/sh -c 'echo NVIDIA_HIBERNATE=`systemctl is-enabled nvidia-hibernate`'"
ENV{NVIDIA_HIBERNATE}!="enabled", GOTO="gdm_disable_wayland"
IMPORT{program}="/bin/sh -c 'echo NVIDIA_RESUME=`systemctl is-enabled nvidia-resume`'"
ENV{NVIDIA_RESUME}!="enabled", GOTO="gdm_disable_wayland"
IMPORT{program}="/bin/sh -c 'echo NVIDIA_SUSPEND=`systemctl is-enabled nvidia-suspend`'"
ENV{NVIDIA_SUSPEND}!="enabled", GOTO="gdm_disable_wayland"
这些服务需要用户自己 enable,所以:
systemctl enable nvidia-hibernate.service
systemctl enable nvidia-resume.service
systemctl enable nvidia-suspend.service
------------------------------
然后就可以用 wayland 啦,虽然这个解决方案并不完美,但是总比简单粗暴地删文件要安全一些。
你看,gdm 给出了这么多的先决条件,如果只是一删了之,以后用起来肯定还会碰到各种问题。以后有啥问题不要草率地删文件了喔。
最近编辑记录 Mr.I (2023-10-14 22:07:51)
离线
页次: 1