3946 字
20 分钟
openSUSE 的一些随便的解
NOTE

封面来源 -> openSUSE CN 社区 Telegram 贴纸包

为什么要换 openSUSE#

因为前一阵子的 AUR 被攻击事件导致的,虽然有 github 镜像但我不想用

而且我已经被 PackageKit 带坏了,不想用 AUR 安装软件了

所以选择了一个避难的系统,原本用的是 Fedora KDE Plasma Desktop Edition

结果因为一些奇奇怪怪问题(如达芬奇因 Python 3.14 无法正常使用,Chromium 类软件会偶发性卡顿)以及当时 Plasma 6.5 推送的时候导致桌面崩溃还历历在目,笔记本上,性能默认调度也不行

所以换成了一个 KDE Friendly,同为德国信创一份子的 openSUSE

但是 openSUSE 有些地方不太行,所以需要靠这个随机的解

更新日志:#

  • 12.22 补充如意玲珑、sudo & polkit 权限问题、镜像站和仓库
  • 12.23 修订错误,补充如意玲珑新内容,感谢 @mozixun
  • 12.24 修改代码块语言内容,加入如意玲珑仓库,使用相对安全的办法让 myrlyn使用自己的主题

镜像站/仓库#

换源#

除了 PackMan 需要额外镜像站的话,如果你不嫌弃刷新慢,可以不用更换镜像站,因为有 Metalink 和 MirrorCache 技术存在

但是大多数人觉得刷新太慢了,而且有时候 302 的镜像站速度也不行(有时候大陆的镜像站没及时同步),所以可能会因此考虑更换镜像站

IMPORTANT

由于 RIS 的存在,有时候关闭镜像站会在执行更新后再度回来
下文会介绍关闭 RIS 的教程

首先禁用所有仓库,并启用 OpenH264 仓库,避免 FireFox 没法使用扩展

Terminal window
sudo zypper mr -da
sudo zypper mr -e openSUSE\:repo-openh264

然后按照以下命令加入镜像站

NOTE

本教程基于 Cernet 联合镜像站教程
可以换成自己喜欢的仓库

Leap(服务包制度 LTS)#

WARNING

Leap 16 目前不再使用更新仓、SLE 仓和移植仓,请只需加入开源、闭源仓即可

Terminal window
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/distribution/leap/$releasever/repo/oss/' mirror-oss # 主仓
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/distribution/leap/$releasever/repo/non-oss/' mirror-non-oss # 闭源仓
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/update/leap/$releasever/oss/' mirror-update # 更新主库,16 已不再使用
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/update/leap/$releasever/non-oss/' mirror-update-non-oss # 更新闭源仓,16 已不再使用
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/update/leap/$releasever/sle/' mirror-sle-update # SLE,16 已不再使用
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/update/leap/$releasever/backports/' mirror-backports-update # Backports 移植,16 已不再使用

Tumbleweed 风滚草(实时滚动分支)#

Terminal window
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/tumbleweed/repo/oss/' mirror-oss # 开源主仓
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/tumbleweed/repo/non-oss/' mirror-non-oss # 闭源仓
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/update/tumbleweed/' mirror-factory-update # 上游更新

Tumbleweed - Slowroll 风滚草慢滚(慢速滚动分支)#

Terminal window
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/slowroll/repo/oss/' mirror-oss # 开源仓
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/slowroll/repo/non-oss/' mirror-non-oss # 闭源仓
sudo zypper ar -p 98 -cfg 'https://mirrors.cernet.edu.cn/opensuse/update/slowroll/repo/oss/' mirror-factory-update # 上游开源更新

其他软件仓库#

openSUSE 是基于 RPM 的,且 zypper 也是通用 yum.repo 格式

可以在/etc/zypp/repos.d/加入仓库,如果想安装 MSEdge、Chrome、甚至 copr 的都可以靠这个方式整

CAUTION

COPR 系 Fedora 用户仓库,类似于 AUR + OBS(基于 RH Koji),但更偏向 RPM 系
在理论上来说,COPR 软件仓库不归本文章红帽管,本文章也不推荐你这么干
想混用 Fedora 的包,建议检查一下自己的 Glibc 允不允许你这么干,Glibc 版本不统一小心系统飞起来
至少在我用的时候,(251204 快照),Fedora 43 和 Slowroll 的 Glibc 版本一样 2.42
所以我能正常安装 mozixun 的 copr 的玲珑

关闭 RIS#

NOTE

默认状态为:启用 RIS,不需要换源

临时禁用#

/etc/zypp/services.d/openSUSE.service里面

enabled autorefresh 设置为 0

可能会在某次更新后被篡改

永久禁用#

卸载所有的 openSUSE-repos 系列包

WARNING

除非你知道你在做什么,否则千万不要这么做
彻底关掉 RIS 意味着你需要自己维护软件源

NVIDIA NOVIDEO#

TIP

openSUSE 有的 NOVIDEO 最友好的体验,由 SUSE 负责打包,NVIDIA 负责仓库
四舍五入相当于官方仓库

更新系统#

Terminal window
sudo zypper dup # 对于 openSUSE 滚动版(风滚草系列)用户
sudo zypper up # 对于 openSUSE Leap 16 用户

仓库#

  • 可以安装 openSUSE 提供的老黄仓库
Terminal window
sudo zypper in openSUSE-repos-<分支名,首字大写>-NVIDIA
WARNING

这种方式加的仓库是基于 openSUSE 的 RIS 服务,会重新打开 openSUSE 官方仓库,正如前文所说,刷新慢,但是下载会重定向,嫌弃刷新慢的建议安装后时候自行关闭仓库

  • 也可以自己手动添加老黄的仓库
Terminal window
sudo zypper ar -fcg 'https://download.nvidia.com/opensuse/tumbleweed' NVIDIA ## 对于openSUSE 滚动版用户
sudo zypper ar -fcg 'https://download.nvidia.com/opensuse/leap/$releasever' NVIDIA ## 对于 LTS 版本 Leap 用户

开始安装#

根据 openSUSE Wiki,选择合适的显卡驱动,可根据如下提示(本人已补充 G06 和 G07 新信息)

IMPORTANT

G03 = driver v340 = GT8xxx/9xxx 设备的旧版驱动程序(通过社区用户,见下文)
G04 = driver v390 = GTX4xx/5xx Fermi 设备的旧版驱动程序
G05 = driver v470 = GeForce 600 系列驱动程序
G06 = driver v580 = GeForce 700 系列(Kepler)及更高版本(Maxwell、Pascal……)的驱动程序
G07 = GeForce GTX 1600 系列/GeForce RTX 20 系列(Turning)及更高版本的驱动程序(新驱动,版本号从 590 起跳,但是目前还没有用户层)

然后,如果是 G06 请根据 英伟达开发者技术博客:NVIDIA 全面转向开源 GPU 内核模块 选择合适自己的显卡模块

闭源内核模块请安装nvidia-driver-G06-kmp-meta或者,开源内核模块请安装nvidia-open-driver-G06-signed-kmp-meta,而 G07 则只有开源内核模块,G02 - G05 只有闭源内核模块

这里以开源内核模块为例子

Terminal window
sudo zypper in nvidia-open-driver-G06-signed-kmp-meta

其他显卡可以根据上面的 important 内容引用,使用zypper se nvidia进行搜索

安全启动#

TIP

如果想自己设置签名的密码,请取消 —root-pw 这个 flag

开源内核模块 SUSE 已经帮你签完了名,等下就能加载(不过会很卡建议注销一下)

而其他内核模块会出现不存在 MOK 而拒绝载入

G06 签名

Terminal window
sudo mokutil --import /var/lib/nvidia-pubkeys/MOK-nvidia-driver-G0<X>-<driver_version>-<kernel_flavor>.der --root-pw

其他显卡签名

Terminal window
sudo mokutil --import /var/lib/nvidia-pubkeys/MOK-nvidia-gfxG0<X>-<driver_version>-<kernel_flavor>.der --root-pw

然后重启输入 root 密码

取消烦人的更新再次同意 EULA#

TIP

因为 NVIDIA 驱动属于专有驱动,作为分发这个驱动的发行版,这么做也无伤大雅,当然,openSUSE 也提供了一个自动同意 EULA 的设置项,放在了 /etc/zypp/zypper.conf里面

找到这一行

# autoAgreeWithLicenses = no

取消注释然后改成 yes 即可

Plymouth 低分辨率#

这是因为驱动包没有为 initramfs 加入 NVIDIA 模块,可以在/etc/dracut.conf.d/新建一个文件,我这里叫做09-nvidia.conf

Terminal window
force_drivers+=" nvidia nvidia_modeset nvidia_uvm nvidia_drm "

然后就

Terminal window
sudo dracut -fv

NV-VAAPI 驱动#

IMPORTANT

为了能够正常在 Chrome 编解码,推荐安装这个驱动,这个驱动会让 VAAPI 调用 CUDA / NV 编解码器以正常完成依赖 VA-API 的编解码工作

下载地址

游戏可能打不开的情况#

建议在游戏之前执行一次 nvidia-smi 看看,如果使用的 lutris,可以在 lutris 的高级设置里面加入预执行脚本 /usr/bin/nvidia-smi

NOTE

也可以学我这样
~/.config/systemd/user/novideo.service 加入如下的服务

[Unit]
Description=NVIDIA Daemon Services
After=graphical-session.target
Wants=graphical-session.target
[Service]
Type=oneshot
ExecStart=/usr/bin/nvidia-smi
[Install]
WantedBy=graphical-session.target

然后 systemctl daemon-reload --user ; systemctl enable --now --user novideo.service

这样重启再登录就会自动执行nvidia-smi

Zypper 设置#

打开 MirrorCache GEOIP 重定向、未签名野包安装#

IMPORTANT

openSUSE 的安全策略阻拦了用户使用 PackageKit 的方式安装 RPM 野包
默认也没开 GEOIP 跳转功能,可以按照以下方式设置

Terminal window
## 备份,可选择移动或者复制
sudo cp /etc/zypp/zypp.conf /etc/zypp/zypp.conf.backup # 复制
sudo mv /etc/zypp/zypp.conf /etc/zypp/zypp.conf.backup # 移动
## 选择自己喜欢的文本编辑器编辑
sudo vi /etc/zypp/zypp.conf # openSUSE 的 VI = VIM
sudo nano /etc/zypp/zypp.conf
sudo micro /etc/zypp/zypp.conf

输入以下文本,复制备份的话你就不需要 [main] 这一行,但是下面的内容你需要复制到 [main] 之下

[main]
repo.refresh.locales = cn, de # 设置仓库刷新地区
download.use_geoip_mirror = true # 打开 GEO IP 跳转
download.max_concurrent_connections = 5 # 设置最多并行量
pkg_gpgcheck = off # 允许 RPM 未签名野包
multiversion = provides:multiversion(kernel) # 默认打开,如果你是直接编辑新文件的话需要加入这句话,允许多版本内核
multiversion.kernels = latest,latest-1,running # 默认打开,如果你是直接编辑新文件的话需要加入这句话,允许保留的内核版本 - 最新,上一个版本,正在运行的版本
CAUTION

目前已知问题:pkg_gpgcheck 即使关闭,部分即使签名了,但签名并未导入或者出现 Metadata 问题,照样会进行拦截,在 PkgKit 依赖的软件管理器(如 DiscoverGNOME Software)照样会报错安装已按指示终止

打开试验性的 Curl 2 + 并行下载#

NOTE

更新:1205 风滚草现在默认启用
如果没有用,可以设置如下环境变量

Terminal window
ZYPP_PCK_PRELOAD=1
ZYPP_CURL2=1

SELinux#

允许用户栈上运行#

Terminal window
sudo setsebool selinuxuser_execstack -P 1

不这样设置,等着跑容器版的微信一级一些奇奇怪怪的被它拒绝吧

但是代价就是安全性会受到牺牲

CAUTION

哈吉米(Gemini)如是说:如果栈既能又能执行(即开启了 execstack),就会非常危险。黑客可以利用 缓冲区溢出(Buffer Overflow) 漏洞,先把恶意代码(Shellcode)写进栈里,然后控制程序跳转到栈上去执行这段代码,从而攻破系统。

Howdy#

新建howdy.te文件

module howdy 1.0;
require {
type lib_t;
type xdm_t;
type v4l_device_t;
type sysctl_vm_t;
class chr_file map;
class file { create getattr open read write };
class dir add_name;
}
#============= xdm_t ==============
allow xdm_t lib_t:dir add_name;
allow xdm_t lib_t:file { create write };
allow xdm_t sysctl_vm_t:file { getattr open read };
allow xdm_t v4l_device_t:chr_file map;

然后

Terminal window
sudo checkmodule -M -m -o howdy.mod howdy.te
sudo semodule_package -o howdy.pp -m howdy.mod
sudo semodule -i howdy.pp

(从 Howdy COPR 偷过来的)

非自由编解码器#

NOTE

由于 SUSE 在美国有办事处,所以因专利授权和万恶的 Digital Millennium Copyright Act(DMCA)存在,我们要跟 Fedora 一样通过 RPMFusion 的方式来解决问题,只不过 SUSE 是叫做 PackMan

首先加入 PackMan 源

TIP

这里用中科大源做示例,大伙可以选择自己喜欢的镜像站

Terminal window
sudo zypper ar -fcg https://mirrors.ustc.edu.cn/packman/suse/openSUSE_Leap_\$releasever/ USTC:PACKMAN ## Leap 用户
sudo zypper ar -fcg https://mirrors.ustc.edu.cn/packman/suse/openSUSE_Tumbleweed USTC:PACKMAN ## 风滚草用户
sudo zypper ar -fcg https://mirrors.ustc.edu.cn/packman/suse/openSUSE_Slowroll USTC:PACKMAN ## 慢滚用户

然后

Terminal window
sudo zypper dup --allow-vendor-change ## 慢滚和风滚草最好使用这个
sudo zypper up --allow-vendor-change ## Leap 用户

这样就可以了

Howdy#

首先去 openSUSE 开放构建服务下载 Howdy Beta,也可以直接加入仓库,不过 OBS 的下载会慢,请使用些学习手段

然后照常设置 Howdy

再在/usr/lib/pam.d/复制一些必要的 PAM 文件进 /etc/pam.d 做覆写,尤其是 common-auth

在文件顶部加入这两句话

auth sufficient pam_unix.so try_first_pass likeauth nullok
auth sufficient pam_howdy.so

如意玲珑#

NOTE

感谢红帽的 systemd 和 dbus,虽然可能跟 openSUSE 的策略有关系

也有可能跟我用 Fedora 43 的包有关系,openSUSE 用户请使用 Mozixun 为 openSUSE 用户跑的灵车
用这个灵车跑了似乎就没遇到什么问题了

安装 openSUSE 版本#

NOTE

推荐安装这个版本

将如下仓库的内容直接抄到/etc/zypp/repos.d/reponame.repo下面

[copr:copr.fedorainfracloud.org:mozixun:OpenAtom-Linyaps-openSUSE]
name=Copr repo for OpenAtom-Linyaps-openSUSE owned by mozixun
baseurl=https://download.copr.fedorainfracloud.org/results/mozixun/OpenAtom-Linyaps-openSUSE/opensuse-tumbleweed-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://download.copr.fedorainfracloud.org/results/mozixun/OpenAtom-Linyaps-openSUSE/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1

然后直接安装玲珑即可,不会遇到什么问题

直接使用 fc 43 的包解决权限问题#

CAUTION

除非你知道你在做什么,否则不推荐这么做

混系统包容易导致系统顺坏!!!

WARNING

AIGC 警告:本解决方案系询问 ChatGPT 而得到的

如果当你尝试 sudo systemctl enable --now org.deepin.linglong.PackageManager.service 出现红色报错让你看 journald 的话

/etc/dbus-1/system.d/org.deepin.linglong.PackageManager.conf加入

<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
 <!-- 允许 root 拥有该服务名 -->
 <policy user="root">
   <allow own="org.deepin.linglong.PackageManager1"/>
   <allow send_destination="org.deepin.linglong.PackageManager1"/>
   <allow receive_sender="org.deepin.linglong.PackageManager1"/>
 </policy>
 <!-- 允许普通用户调用 -->
 <policy context="default">
   <allow send_destination="org.deepin.linglong.PackageManager1"/>
 </policy>
</busconfig>

sudo 和 PolicyKit 权限的问题#

NOTE

目前的 Leap 16 默认状态,安装完的用户就已经有完整 wheel 权限了,这边是给滚动版(或其他还在用 YaST2 安装的分支)写的解决方案

总所周知,林纳斯·本纳第克特·托瓦兹本人曾经也是一个 openSUSE + KDE 用户,因为转向 GNOME 3 的 Fedora 是狗屎(个人补充,现在的 GNOME 也是狗屎),而让他对 openSUSE 完全无言以对的,就是是这个问题

你敢想象,用户组没有 sbin 的访问权限,终端内关机和重启都必须使用 sudo(其实现在都 systemd 了,实在不行就 systemctl poweroff / systemctl reboot 了)

SUSE 如果早点解决这个问题的话 Linus 估计就是 KDE + openSUSE 用户而不是狗屎的 GNOME 用户了

The final straw though was when Torvalds’ young daughter “Daniela calls me from school, because she can’t add the school printer without the admin password.”
“压垮我的最后一根稻草是托瓦兹年幼的女儿“丹妮拉从学校给我打电话,因为没有管理员密码她无法添加学校打印机。” 来自 ZDnet - Linus Torvalds snarls at openSUSE desktop Linux’s security(传送门)

sudo#

首先,将自己加入 wheel

Terminal window
sudo usermod -aG wheel $(whoami)

然后注销/重启

首先打开 visudo,使用

Terminal window
sudo visudo # 使用 VI 打开 sudoers
sudo EDITOR=nano/micro/... visudo # 使用自己喜欢的文本编辑器打开 sudoers

将这两行使用#注释

CAUTION

请不要只注释 Default targetpw,除非你知道你在干什么
这个操作会导致所有用户都可以访问 sudo

Defaults targetpw   # ask for the password of the target user i.e. root
ALL   ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!

然后取消注释这一行(即删除前面的#

# %wheel ALL=(ALL:ALL) ALL
TIP

如果你是多用户想严格管理 sudo 权限,可使用自己用户名,或者使用sudo groupadd -r sudo并将自己加入 sudo 组,对 wheel 组做指令限制,与此同时在 sudoers 加入 %sudo ALL=(ALL:ALL) ALL,这里不对 sudoers 配置做更多解释

然后关闭 VIM,使用 sudo -i / sudo -s 测试

PolicyKit#

根据 BTW Arch Wiki 请在 /etc/polkit-1/rules.d/50-default.rules加入这一段

polkit.addAdminRule(function(action, subject) {
return ["unix-group:wheel"];
});
TIP

如果你是多用户想严格管理使用 polkit 的权限,可使用自己用户名,或者使用sudo groupadd -r sudo并将自己加入 sudo 组,并将这个的组改为 sudo,这里不对 PolicyKit 做更多的解释

supergfxctl 无法正常使用#

尝试使用 sudo supergfxctl -g访问看看,如果不带 sudo 不行而带 sudo 可以的话

尝试将自己加入userssupergfxctl

梅林 myrlyn 没法使用主题#

myrlyn 是 openSUSE 用于替代YaST2 sw_single(软件管理)YaST2 online_update(在线更新) YaST2 repositories(软件源)的一个工具,它默认给的 myrlyn-sudo 是输入密码,而且是明文输入,不支持 Howdy 的,所以土法手搓一个脚本,已经测试完成,毕竟万一未来真换了 sudo-rs 没有 sudo -E 就简单很多

新建一个 sh 文件,名字自己取,这里叫 myrlyn-btw

#!/usr/bin/env bash
pkexec env DISPLAY=$DISPLAY WAYLAND_DISPLAY=$WAYLAND_DISPLAY XAUTHORITY=$XAUTHORITY XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR QT_QPA_PLATFORMTHEME=$QT_QPA_PLATFORMTHEME QT_ENABLE_HIGHDPI_SCALING=$QT_ENABLE_HIGHDPI_SCALING QT_SCALE_FACTOR=$QT_SCALE_FACTOR LANG=$LANG LC_MESSAGES=$LC_MESSAGES LC_COLLATE=$LC_COLLATE LC_NUMERIC=$LC_NUMERIC LC_TIME=$LC_TIME LC_ALL=$LC_ALL LANGUAGE=$LANGUAGE KDE_SESSION_VERSION=$KDE_SESSION_VERSION KDE_FULL_SESSION=$KDE_FULL_SESSION XDG_CONFIG_HOME=$XDG_CONFIG_HOME /usr/bin/myrlyn

然后将这个文件复制

Terminal window
sudo cp myrlyn-btw /usr/bin/
sudo chmod +x myrlyn-btw

这些环境变量分别为

  • 显示器环境
  • 个人认证
  • 个人 XDG 运行库
  • QT 主题
  • 是否启用 Qt 高分缩放
  • Qt 高分缩放比
  • 语言
  • KDE 会话版本
  • 是否为 KDE 完整会话
  • XDG 配置文件目录

但是 myrlyn 没有 i18n,也没法直接双击打开文件安装,鉴定为不如调用 xdg-suYaST2

目前还存在的问题#

  • Howdy 没法在 Polkit 使用,目前已在 openSUSE 论坛、Polkit Issues、Howdy Issues 提问(2025.12.24 已解决,问题出在红帽在 Polkit 加入了一个名为 PolKit Agent Socket 服务)

持续更新喵~#

只不过似乎也没啥更新的了
openSUSE 的一些随便的解
https://ne0w0r1d.top/posts/opensuse-issues/
作者
Ne0W0r1d 新界
发布于
2025-12-04
许可协议
CC BY-NC-SA 4.0