openSUSE:13.1常见问题
目录
- 1 网络接口名称变成 Arch 那样无序的 enp0s3 了?
- 2 Virtualbox 虚拟机装完没有网络?
- 3 YaST 中的「删除软件包时清理」和「允许变更厂商」变成一次性的了?
- 4 GNOME 用户 zypper dup 时注意
- 5 Adobe Reader 从 Non-oss 源中移除了
- 6 Samba 4.1 版
- 7 Apache 2.4 版
- 8 KDE 下的蓝牙不能传文件
- 9 Fcitx 和 GNOME
- 10 播放视频缺少解码器时弹出的那个安装提示窗口中的解码器名称是乱码(KDE),即使不是乱码(GNOME)也无法安装任何解码器?
- 11 YaST gome 界面无法正常显示中文
- 12 fcitx 系统托盘图标太大?
- 13 KDE 下 fcitx 打单字时会卡?
- 14 YaST gnome 界面无法添加软件源?
- 15 DVD 安装卡在 44%
- 16 ATI 驱动源被墙?
- 17 请添加
网络接口名称变成 Arch 那样无序的 enp0s3 了?
在新安装的 13.1 上,您可能会注意到您的有线网络的网络接口名称不再是地球人都知道的 eth0,无线网络的网络接口名称也不再是 wlan0,同理 vlan0 啊,tun0 啊都变了,直让人有想掀桌的冲动。
为什么要做出这么反人类的改变呢?是为了确保每次重启后都有可预测的网卡名称(NIC name)。这样如果你在卡槽里添加了新网卡(一般人不会吧),重启后可能新网卡变成了 eth0 而你的旧网卡现在是 eth1,老的命名方案就会把你原来的配置全应用到新网卡上去,这显然是不行的(多网卡环境一般每个网卡要干的事情都是不一样的)。而新的命名方案就不会,因为实质上 enp0s3 在你的计算机上是唯一的(不是在全世界都是唯一的,别人使用相同硬件可能会获得相同名称,但可能性非常小)。简单说,为了更好的用于服务器环境。
这项改变是新版的 systemd 带来的。它现在会使用固件/BIOS 提供的索引编号(ID_NET_NAME_ONBOARD)命名网卡。如果那个信息不可获得(比如你在虚拟机里面)它会退而求其次使用固件/BIOS 提供的 PCI-E 热插拔插槽索引编号(ID_NET_NAME_SLOT)来命名。如果还不行,继续退而求其次使用硬件连接器的物理/地理位置(ID_NET_NAME_PATH)来命名(就是我举例的这个 enp0s3)。还不行就会使用接口的 MAC 地址(ID_NET_NAME_MAC)来命名。最后才会使用经典的、不可预测的、内核原生的 ethX 命名方案(就是 eth0)。
如果你想知道为什么会被命名成那样,可以运行:
udevadm test-builtin net_id /sys/class/net/你原来的网络接口比如eth0 2> /dev/null
注意上面那条命令是 udev 204 版以后才有的,12.3 中的 udev 195 版的 test-builtin 是没有 net_id 这个参数的,所以不能用于「看看我的网络接口即将变成什么」,因为在 12.3 上运行这条命令的返回是空的。正常的话会返回下面这样一串:
ID_NET_NAME_MAC=enxd4a8xxxxxxxx ID_NET_NAME_ONBOARD=eno1 ID_NET_NAME_PATH=enp1s0f1
于是根据 ONBOARD > SLOT > PATH > MAC > Kernel Native 的原则,你的网卡会被命名为 eno1。
对于目前什么也不懂的新人来说,这项改变什么都不影响。只是你以后在祭出 google 的时候要把你这个实质上「唯一」的网卡名称换成 eth0,比如报错信息是 enp0s3 not found,你就要去搜 eth0 not found。不然可能也不是搜不到,只是搜索范围会变小很多。
对于懂很多东西,甚至写了很多 sysvinit 风格的脚本的大拿来说,这种改变可能是暂时无法接受的(虽然「静态使用网络接口」本身就是一种错误的脚本风格,但迁移成本确实有点高啊),所以提供了以下方法让我们能继续使用之前命名方案的网络接口名:
1. 使用 udev 的屏蔽机制,把它做 ONBOARD > SLOT > PATH > MAC > Kernel Native 的机制给屏蔽掉(也就是弄个空的 80-net-name-slot.rules):
sudo ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules
2. 在内核命令行永久添加 net.ifnames=0,YaST 引导加载器模块可以做。 3. 在 /etc/udev/rules.d 下面放一个新文件 70-persistent-net.rules,内容如下:
# PCI device <设备的 PCI 编号> (设备驱动名称) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="<设备的 MAC 地址>", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="<你要使用的名称>"
其中设备的 PCI 编号这么取得:
sudo /sbin/lspci -nn
找 Ethernet controller 和 Network controller,比如我这里是:
Ethernet controller: Intel Corporation 82566MM Gigabit Network Connection [8086:1049] (rev 03)
8086:1049 就是「设备的 PCI 编号」只不过你要写成:0x8086:0x1049 的格式。
设备驱动名称,你都知道设备的完整名字叫 Intel Corporation 82566MM Gigabit Network Connection 了,可以去 LKDDB(Linux Kernel Driver Database)搜索一下:http://cateee.net/lkddb/web-lkddb/
输入那个名字就会有返回:http://cateee.net/lkddb/web-lkddb/E1000E.html
这个 e1000e 就是驱动名称。设备的 MAC 地址可以通过
sudo /sbin/ifconfig
获得,比如 HWaddr 00:1B:77:C4:51:C7,那个字符串就是。至于「你要使用的名称」,你是有线网就是 eth0 是无线网就是 wlan0(C 语言编程的数字是从 0 开始的,内核是 C 语言写的)。这个方法也可以用于定制自己的网络接口名称(没那么无聊吧诸位?)比如 hellokitty0。
4. 自己改 udev 的匹配机制,让 Kernel Native 在前,首先:
sudo cp -r /usr/lib/udev/rules.d/80-net-name-slot.rules /etc/udev/rules.d/80-net-name-slot.rules
然后打开编辑。
该条的参考链接和延伸阅读
- PredictableNetworkInterfaceNames,解释了更多的「为什么」和「好处」。
- <Getoo Wiki>:<Udev/upgrade> 以及 systemd 源代码,解释了命名方案的使用原则和判断机制。
- <教学>如何查看您的 ATI 显卡是否被已安装内核中的开源 Radeon 驱动支持?,是修复方法三的直接来源。
- 通过设备名称查找驱动模块名称的网站 LKDDB(Linux Kernel Driver Database
- openSUSE 开发者和用户讨论这一问题的主话题所在地
Virtualbox 虚拟机装完没有网络?
sudo systemctl start NetworkManager
启动 NetworkManager 服务,会自动运行 DHCP 分配 IP 地址给你。之后可用:
ping 127.0.0.1
或
ping 192.168.1.1
测试(按 Ctrl + C 可停止 ping,不然会一直进行)。或用:
sudo systemctl status NetworkManager
查看其状态。一般情况下这时你的网络已经激活了。但你如果运行比如
ping www.baidu.com
或者
nslookup www.baidu.com
是没有结果的。因为我们没指定系统查询域名所用的 DNS 服务器。
编辑 /etc/resolv.conf(需要 root 权限),你可以
sudo vi /etc/resolv.conf
按字母 i 进入插入/编辑模式,编辑好按 Esc 退出插入模式,然后输入 :wq 保存退出即可(冒号别丢,在 vim 里它表示进入命令模式)。
在那个文件的最后加入:
nameserver 8.8.8.8 nameserver 8.8.4.4
之后就能 ping 或着 nslookup 百度了。
YaST 中的「删除软件包时清理」和「允许变更厂商」变成一次性的了?
以上是两个非常好的选项。「删除软件包时清理」相当于 apt-get autoremove,对应的是 sudo zypper rm -u。「允许变更厂商」是说在系统自动解决依赖关系时,允许它把你从这个源里安装的软件包升级到那个源里提供的新版本(默认是不让的,因为新手不太会加源和调节优先级,经常会无意中就升级到了某个脚本小子自己做的包而不是发行版质量的包而导致系统不稳定,然后反过头来怪 openSUSE 不咋样)。
做翻译的时候看到的,理论上仅会应用于 YaST Ncurses 界面,也就是你打开一个 konsole,运行:
sudo /sbin/yast
看到的那个页面。而 Qt/KDE 和 GTK/GNOME 下的 YaST 应该不会受到影响(就是「选项」下面的那两个勾)。但我不确定,第一次安装软件前您最好自己确认一下。
翻译时的原话是这样:
高级选项:「删除软件包时清理」:移除无用的依赖软件包。「允许变更厂商」:软件包厂商可以和已安装软件包的厂商不同。这些选项将不会被保存,它们只可以在软件包库的配置文件 /etc/zypp/zypp.conf 中设置。
真遇到了问题的话打开 /etc/zypp/zypp.conf:
# solver.allowVendorChange = false # solver.cleandepsOnRemove = false
把这两个变成:
solver.allowVendorChange = true solver.cleandepsOnRemove = true
即可。
PS:上面那个配置文件里有好多有用的选项,比如你可以选择下载指定语言的软件包摘要/描述的翻译以减小下载流量(这个是从德国主服务器直接下载的,下的越少越快,默认下载全部语言,所以你刷新才会那么久),还有超时前等待的秒数(这样你的渣渣网络就不会显得 YaST 很卡)等等。
GNOME 用户 zypper dup 时注意
删除你们的 /etc/fstab 中的:
tmpfs /dev/shm\n devpts /dev/pts\n sysfs /sys sysfs\n proc /proc proc
项再运行 sudo zypper dup 升级,不然 GNOME Terminal 会遇到 grantpt failed: Operation not permitted 错误。这是 GNOME Terminal 代码中所用到的 glibc 的一个函数带来的副作用。上面那些项现在由 systemd 管理并自动创建,不需要手动添加到 /etc/fstab 里了。按理不影响其它,但鬼知道呢。
Adobe Reader 从 Non-oss 源中移除了
Adobe 宣布以后不再会为 Linux 版的 Reader 提供安全更新了,为了防止一个闭源软件让整个系统都更加不安全,我们从源中移除了这个包。需要的用户可以去 Adobe 网站自行下载并后果自负。不过在国内很少有需要 Reader 才能打开的 pdf,即使有,它的流程在 Linux 也是早已经确定用不了的(比如移民计划申报,报税那些)。
Samba 4.1 版
默认禁用了活动目录风格的域控制器(Active Directory style domain controller),因为该功能现在没法跟系统全局的 Kerberos 加密一起使用。
Apache 2.4 版
配置变了很多,升级后请更新你的配置。差异和新配置选项请见上游网站。
KDE 下的蓝牙不能传文件
新版 GNOME 和新版系统需要 Bluez 5, 而现在 KDE 所有版本都只支持 Bluez 4。openSUSE KDE 团队把 Bluedevil 自行移植到了 5,但是这个工作因为没有来自上游的支持,目前只支持 KDE 下配对和使用蓝牙鼠标,传文件是不行的。所以不要针对完全没有的功能报 bug。
Fcitx 和 GNOME
我们在 13.1 中开启了 IBus 的 GNOME 整合(因为不开的话 IBus 就要废了)。所以想要 fcitx 在屏幕上方的面板而不是下方的提示面板出现,请自行安装一个叫 Topicons 的扩展(这个扩展网上看似乎有些极特殊情况下会造成 CPU 100%,但上游也没复现成功,不管怎样,只有这一个扩展能实现这个功能)。
另外 fcitx 4.2.8 默认是禁用了功能面板的。就是只有输入面板。可以自己在设置里打开。
另外 fcitx 若无法在 QT 程序中调出,请看
https://fcitx-im.org/wiki/Note_for_GNOME_Later_than_3.6
运行那条命令并重新登录。
播放视频缺少解码器时弹出的那个安装提示窗口中的解码器名称是乱码(KDE),即使不是乱码(GNOME)也无法安装任何解码器?
这个问题比较复杂。是 PackageKit 的若干个故障、Apper 的若干个故障混合在一起的表现。甚至 debug 起来也比较麻烦,因为现在有的应用程序用 gstreamer 0.10 有的用 1.0,你得知道它们用的是不是同一个版本的 gstreamer 然后才能做比较。
原理是这样:缺少解码器 --> 通知 gst-install-plugins-helper 查找 --> gst-install-plugins-helper 调用 PackageKit 前端(有两个:Apper 和 gnome-packagekit)--> PackageKit 前端 Apper 和后端通信 --> 后端通过 zypper 找到所需软件包 --> 安装完成。
现在是这样的,解码器名称是乱码是 Apper 的故障(已修复,是 phonon-gstreamer 的故障),gnome-packagekit 没有,所以 KDE 下乱码,GNOME 下正常; 无法安装是 Packagekit 自己的故障,简单说就是:如果后端找到了两个同名的软件包,那么后端的选择是一个也不安装。可是我们必然有两个同名软件包,因为 openSUSE 和 Packman 双方都有提供 gstreamer-0_10-plugins-bad 这些。
目前的进展就是这样。
YaST gome 界面无法正常显示中文
首先,中文是 100% 翻译的,所以不要说「哎呀,没翻译啊」。
其次,这是个老 bug 了:https://bugzilla.novell.com/show_bug.cgi?id=801311。
第三,西班牙语(es)也有这个问题。
这个问题的表现主要有三块(我在 KDE 中测试的):
1. 点击「安装/删除软件」(是「应用程序」的图标),这会直接打开 YaST 软件管理,这时你看到的载入屏幕是中文的。而点击「YaST 控制中心」(YaST 的绿色图标),然后再点击「软件管理」,这时你看到的载入屏幕是英文的,只有一行中文字叫「正在加载软件管理器」。这可能是 yast2-control-center-gnome 的故障。
2. 进入软件管理后,顶部菜单全是英文的。这是由于 yast2-ycp-ui-bindings 里面忘记初始化语言造成的,在 3.0.2 版中已修复。可从
https://build.opensuse.org/project/show/home:lslezak:branches:openSUSE:13.1:Update
下载。
3. 底部的比如「跳过自动刷新」、「帮助」等是英文的。这是由于 YaST2 的 gtk.pot 翻译源文件里只包含了 libyui-gtk-pkg5 的翻译而没包括 libyui-gtk5 的翻译。这个的修复已经进入 svn 中了。可从
这里下载最新的 gtk.zh_CN.po,然后运行
msgfmt gtk.zh_CN.po -o gtk.mo sudo cp -r gtk.mo /usr/share/YaST2/locale/zh_CN/LC_MESSAGES/
即可修复。
fcitx 系统托盘图标太大?
https://bugzilla.novell.com/show_bug.cgi?id=851983
我传错源文件了。
KDE 下 fcitx 打单字时会卡?
现象:fcitx 有时打单字时会卡,有些字是确定会卡的(比如「件」、「猛」),有些字是确定不会卡的(「去」),一定要猛敲最后一个字的最后一个字母比如「件」的「n」好多次才会解除卡顿状态,而输入词组比如「原件」时则不会有该情况。
关闭特效(Alt + Shift + F12)后恢复正常。
解决办法:
「系统设置」-「桌面效果」-「高级」,看看你的「混成类型」是不是 Xrender。这个渲染引擎的性能不是很好。
点击左下角的「默认值」,然后「应用」即可。
YaST gnome 界面无法添加软件源?
现象:正常的添加软件源,YaST 无错退出。再打开,发现新添加的软件源并没有出现。
https://bugzilla.novell.com/show_bug.cgi?id=853408
暂时性绕过问题:使用 `sudo zypper ar -f 软件源地址 软件源名称` 添加。
DVD 安装卡在 44%
上面 12%,下面 44%。这时在运行的是这个命令
systemctl restart network.service
是这个故障 Bug #801654。
暂时性绕过问题:个人真机测试,自动配置的问题都可以通过等足够长的时间让它超时来解决。
ATI 驱动源被墙?
可以用自己制作 RPM 的方式解决:教学·打包 AMD 显卡驱动