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 没法使用扩展
sudo zypper mr -dasudo zypper mr -e openSUSE\:repo-openh264然后按照以下命令加入镜像站
NOTE本教程基于 Cernet 联合镜像站教程
可以换成自己喜欢的仓库
Leap(服务包制度 LTS)
WARNINGLeap 16 目前不再使用更新仓、SLE 仓和移植仓,请只需加入开源、闭源仓即可
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 风滚草(实时滚动分支)
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 风滚草慢滚(慢速滚动分支)
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 的都可以靠这个方式整
CAUTIONCOPR 系 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
TIPopenSUSE 有的 NOVIDEO 最友好的体验,由 SUSE 负责打包,NVIDIA 负责仓库
四舍五入相当于官方仓库
更新系统
sudo zypper dup # 对于 openSUSE 滚动版(风滚草系列)用户sudo zypper up # 对于 openSUSE Leap 16 用户仓库
- 可以安装 openSUSE 提供的老黄仓库
sudo zypper in openSUSE-repos-<分支名,首字大写>-NVIDIAWARNING这种方式加的仓库是基于 openSUSE 的 RIS 服务,会重新打开 openSUSE 官方仓库,正如前文所说,刷新慢,但是下载会重定向,嫌弃刷新慢的建议安装后时候自行关闭仓库
- 也可以自己手动添加老黄的仓库
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 新信息)
IMPORTANTG03 = 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 只有闭源内核模块
这里以开源内核模块为例子
sudo zypper in nvidia-open-driver-G06-signed-kmp-meta其他显卡可以根据上面的 important 内容引用,使用zypper se nvidia进行搜索
安全启动
TIP如果想自己设置签名的密码,请取消 —root-pw 这个 flag
开源内核模块 SUSE 已经帮你签完了名,等下就能加载(不过会很卡建议注销一下)
而其他内核模块会出现不存在 MOK 而拒绝载入
G06 签名
sudo mokutil --import /var/lib/nvidia-pubkeys/MOK-nvidia-driver-G0<X>-<driver_version>-<kernel_flavor>.der --root-pw其他显卡签名
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
force_drivers+=" nvidia nvidia_modeset nvidia_uvm nvidia_drm "然后就
sudo dracut -fvNV-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 ServicesAfter=graphical-session.targetWants=graphical-session.target
[Service]Type=oneshotExecStart=/usr/bin/nvidia-smi
[Install]WantedBy=graphical-session.target然后 systemctl daemon-reload --user ; systemctl enable --now --user novideo.service
这样重启再登录就会自动执行nvidia-smi
Zypper 设置
打开 MirrorCache GEOIP 重定向、未签名野包安装
IMPORTANTopenSUSE 的安全策略阻拦了用户使用
PackageKit的方式安装 RPM 野包
默认也没开 GEOIP 跳转功能,可以按照以下方式设置
## 备份,可选择移动或者复制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 = VIMsudo nano /etc/zypp/zypp.confsudo 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依赖的软件管理器(如Discover、GNOME Software)照样会报错安装已按指示终止
打开试验性的 Curl 2 + 并行下载
NOTE更新:1205 风滚草现在默认启用
如果没有用,可以设置如下环境变量
ZYPP_PCK_PRELOAD=1ZYPP_CURL2=1SELinux
允许用户栈上运行
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;然后
sudo checkmodule -M -m -o howdy.mod howdy.tesudo semodule_package -o howdy.pp -m howdy.modsudo semodule -i howdy.pp(从 Howdy COPR 偷过来的)
非自由编解码器
NOTE由于 SUSE 在美国有办事处,所以因专利授权和万恶的 Digital Millennium Copyright Act(DMCA)存在,我们要跟 Fedora 一样通过 RPMFusion 的方式来解决问题,只不过 SUSE 是叫做 PackMan
首先加入 PackMan 源
TIP这里用中科大源做示例,大伙可以选择自己喜欢的镜像站
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 ## 慢滚用户然后
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 nullokauth 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 mozixunbaseurl=https://download.copr.fedorainfracloud.org/results/mozixun/OpenAtom-Linyaps-openSUSE/opensuse-tumbleweed-$basearch/type=rpm-mdskip_if_unavailable=Truegpgcheck=1gpgkey=https://download.copr.fedorainfracloud.org/results/mozixun/OpenAtom-Linyaps-openSUSE/pubkey.gpgrepo_gpgcheck=0enabled=1enabled_metadata=1然后直接安装玲珑即可,不会遇到什么问题
直接使用 fc 43 的包解决权限问题
CAUTION除非你知道你在做什么,否则不推荐这么做
混系统包容易导致系统顺坏!!!
WARNINGAIGC 警告:本解决方案系询问 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 组
sudo usermod -aG wheel $(whoami)然后注销/重启
首先打开 visudo,使用
sudo visudo # 使用 VI 打开 sudoerssudo EDITOR=nano/micro/... visudo # 使用自己喜欢的文本编辑器打开 sudoers将这两行使用#注释
CAUTION请不要只注释
Default targetpw,除非你知道你在干什么
这个操作会导致所有用户都可以访问sudo
Defaults targetpw # ask for the password of the target user i.e. rootALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!然后取消注释这一行(即删除前面的#)
# %wheel ALL=(ALL:ALL) ALLTIP如果你是多用户想严格管理
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 可以的话
尝试将自己加入users和supergfxctl组
梅林 myrlyn 没法使用主题
myrlyn 是 openSUSE 用于替代YaST2 sw_single(软件管理)YaST2 online_update(在线更新) YaST2 repositories(软件源)的一个工具,它默认给的 myrlyn-sudo 是输入密码,而且是明文输入,不支持 Howdy 的,所以土法手搓一个脚本,已经测试完成,毕竟万一未来真换了 sudo-rs 没有 sudo -E 就简单很多
新建一个 sh 文件,名字自己取,这里叫 myrlyn-btw
#!/usr/bin/env bashpkexec 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然后将这个文件复制
sudo cp myrlyn-btw /usr/bin/sudo chmod +x myrlyn-btw这些环境变量分别为
- 显示器环境
- 个人认证
- 个人 XDG 运行库
- QT 主题
- 是否启用 Qt 高分缩放
- Qt 高分缩放比
- 语言
- KDE 会话版本
- 是否为 KDE 完整会话
- XDG 配置文件目录
但是 myrlyn 没有 i18n,也没法直接双击打开文件安装,鉴定为不如调用 xdg-su 的 YaST2
目前还存在的问题
- Howdy 没法在 Polkit 使用,目前已在 openSUSE 论坛、Polkit Issues、Howdy Issues 提问(2025.12.24 已解决,问题出在红帽在 Polkit 加入了一个名为 PolKit Agent Socket 服务)