您尚未登录。

#1 2023-10-14 01:41:54

Rice
会员
注册时间: 2023-10-05
帖子: 6

[已解决]在一系列操作后,X.org 桌面冻结问题

电脑配置如下:
电脑名: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)

离线

#2 2023-10-14 06:06:32

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 308

Re: [已解决]在一系列操作后,X.org 桌面冻结问题

如果你可以把出问题时的 journal 发出来的话,我可以帮你分析一些 gnome/gdm 相关的日志(kde 不懂)

在看到日志之前,我只能在你已提供的信息中指出几个问题:

Rice 说:

安装了xorg-drivers

我觉得你应该用不到这么多的 drivers。nvidia 的用户空间驱动由 nvidia-utils 提供。

Rice 说:

之前是设置过gdm显示Wayland的

目前,gnome 默认使用 wayland 作为显示协议。也许你的配置文件中存在一些不必要的配置

Rice 说:

虽然Wayland是可以用,但是有些软件需要在x11用

Xwayland 现在已经很成熟了。若你遇到一些 X 程序无法在 Xwayland 中运行并且没有简单的 workarounds,那再切换回 Xorg 也不迟。
实际上,这是一个你迟早要面对的问题,因为 gnome 可能会在不久的将来终止对 X11 会话的支持

最近编辑记录 Mr.I (2023-10-14 06:11:29)

离线

#3 2023-10-14 10:57:04

Rice
会员
注册时间: 2023-10-05
帖子: 6

Re: [已解决]在一系列操作后,X.org 桌面冻结问题

我把xorg-drivers删干净了,只留了xf86-libinput一些输入设备驱动,貌似是之前按装xorg-drivers同时安装了 AMD 的驱动 和 Intel 与 NVIDIA 的开源驱动导致的,而且我还在initcpio.conf增加了nvidia的modules,所以可能导致了一系列冲突问题。
gdm的问题可以通过网上删除文件的办法解决。把/usr/lib/udev/rules.d/61-gdm.rules删除或者移动然后重启就可以登陆wayland会话了。

谢谢已解决

离线

#4 2023-10-14 11:11:09

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 308

Re: [已解决]在一系列操作后,X.org 桌面冻结问题

Rice 说:

把/usr/lib/udev/rules.d/61-gdm.rules删除或者移动然后重启就可以登陆wayland会话了

你这样搞,是会出事情的 ☠️

离线

#5 2023-10-14 11:22:53

Rice
会员
注册时间: 2023-10-05
帖子: 6

Re: [已解决]在一系列操作后,X.org 桌面冻结问题

会有什么影响吗

离线

#6 2023-10-14 11:48:36

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 308

Re: [已解决]在一系列操作后,X.org 桌面冻结问题

因为你这么做破坏了 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)

离线

#7 2023-10-14 11:50:52

Rice
会员
注册时间: 2023-10-05
帖子: 6

Re: [已解决]在一系列操作后,X.org 桌面冻结问题

az,我看网上说是显卡不兼容(n卡的锅),不过我到没用出什么问题。而且sddm可以直接登陆,就gdm不可以。

离线

#8 2023-10-14 12:03:36

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 308

Re: [已解决]在一系列操作后,X.org 桌面冻结问题

N 卡不兼容那是很久之前的事情了,gdm 自己都写了 nvidia >=510 首选 wayland

离线

#9 2023-10-14 17:26:20

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 308

Re: [已解决]在一系列操作后,X.org 桌面冻结问题

我仔细看了一下 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)

离线

页脚