Linux 系统管理

本文记录一些 Linux 系统管理相关笔记。

NetworkManager.service is masked

此问题在 $ sudo systemctl enable --now NetworkManager.service 时,会导致失败,报出如下错误:

Failed to enable unit: Unit file /etc/systemd/system/NetworkManager.service is masked.

参考 What is a masked service?,可以解除该服务的遮蔽,从而解决问题。

X2go 安装过程

快速将咱们的机器转入到一台 X2Go 服务器:


sudo apt-add-repository ppa:x2go/stable
sudo apt-get update
sudo apt-get install x2goserver x2goserver-xsession ubuntu-mate-core mate-tweak lxde xfce4 x2gomatebindings x2golxdebindings -y # if you use LXDE/lubuntu

快速安装 x2goclient:

sudo apt-add-repository ppa:x2go/stable
sudo apt-get update
sudo apt-get install x2goclient

"Authentication required. System policy prevents WiFi scans"

在使用 X2go 客户端连接到 Linux Mate 桌面时,会遇到这个问题。参考:

/etc/polkit-1/localauthority/50-local.d/ 下建立一个 47-allow-wifi-scan.pkla 策略文件,内容如下:

[Allow Wifi Scan]
Identity=unix-user:*
Action=org.freedesktop.NetworkManager.wifi.scan;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.network-control
ResultAny=yes
ResultInactive=yes
ResultActive=yes

然后运行 $ sudo systemctl restart polkit.service 重启该服务,之后问题解决。

X2Go "Globally allow server-side disabling of the clipboard" 问题

此问题已在 X2Go 4.0.1.16 版本中解决,参考 Globally allow server-side disabling of the clipboard

在文件 /etc/x2go/x2goagent.options 中,找到 X2GO_NXAGENT_DEFAULT_OPTIONS+=" -clipboard both" 这行,将其解除注释,然后根据需要设置 bothclientservernone 选项。

"Ehternet device not managed" 问题

在安装 Ubuntu 时,因安装的是服务器版本,而只安装了 ubuntu-mate-core mate-tweak lxde xfce4 桌面,重启后发现没有网络连接。

Ubuntu 安装 FirefoxESR

Mozilla Firefox 有着两个发布系列:RapidESR。Rapid 发布

添加 Mozilla 官方 PPA:

sudo add-apt-repository -y ppa:mozillateam/ppa

安装 FirefoxESR:

sudo apt install -y firefox-esr

参考:How to install Firefox ESR via PPA in Ubuntu 22.04 | 20.04

dpkg-statoverride 命令

在安装软件包时,偶然会遇到下面这种情况:

statoverride 文件错误故障

这是就要查看这个 statoverride 文件:

$ sudo dpkg-statoverride --list
geoclue geoclue 755 /var/lib/geoclue
root lp 775 /var/log/hp/tmp
root crontab 2755 /usr/bin/crontab
root ssl-cert 710 /etc/ssl/private
root x2gouser 2755 /usr/lib/x2go/libx2go-server-db-sqlite3-wrapper

这时运行以下命令:

sudo dpkg-statoverride --remove /usr/lib/x2go/libx2go-server-db-sqlite3-wrapper

删除 x2gouser 的那行,随后就解决了之前报出的问题,可以正常安装软件包了。

参考:syntax error: unknown user 'munin' in statoverride file

Docker 下运行 NDS 交叉编译器报出错误

./riscv32-elf-gcc --version
bash: ./riscv32-elf-gcc: cannot execute: required file not found

此时运行:

$ ldd ./riscv32-elf-gcc
        /lib64/ld-linux-x86-64.so.2 (0x7f8651aec000)
        libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f8651aec000)
        libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f8651aec000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by ./riscv32-elf-gcc)
LDD(1)                                                              Linux Programmer's Manual                                                             LDD(1)

NAME
       ldd - print shared object dependencies

SYNOPSIS
       ldd [option]... file...

DESCRIPTION
       ldd prints the shared objects (shared libraries) required by each program or shared object specified on the command line.  An example of its use and out‐
       put is the following:

         $ ldd /bin/ls
                 linux-vdso.so.1 (0x00007ffcc3563000)
                 libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000)
                 libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000)
                 libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000)
                 libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000)
                 libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000)
                 /lib64/ld-linux-x86-64.so.2 (0x00005574bf12e000)
                 libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000)
                 libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000)
...

解决办法:安装 gcompat

# apk add gcompat

参见:Docker Alpine executable binary not found even if in PATH

tar 命令用法

将多个文件压缩到一个压缩包(带通配符):

tar czf ~/wise.tar.gz -T <(\ls wise*) System.map

此命令会把当前目录下以 wise 开头的所有文件,与 System.map 文件一起打包进 wise.tar.gz 这个压缩包。而解压缩的步骤如下:

mkdir wise-bin
tar xzf wise.tar.gz -C wise-bin

解压得到一下文件:

~/wise-bin$ ls
System.map  wise  wise-boot-ram.bin  wise.cfg  wise.cfg.configs  wise.lds  wise.map  wise.sym

切换 GRUB 默认启动项

参考:How do I change the GRUB default boot?

grep menuentry /boot/grub/grub.cfg # it will show all available menuentries
sudo vim /etc/default/grub # replace GRUB_DEFAULT=0 with GRUB_DEFAULT="needed menu entry from above"
sudo update-grub # update grub configuration file

注意:运行 update-grub 时,在 Ubuntu 上会给出 Advanced .... 的提示信息,按照提示信息再编辑 /etc/default/grub 文件,即可消除该提示信息,且系统可以新设定的启动项启动。

安装 Linux 系统后追加安装 Windows 系统处理

  • 使用 GParted 启动盘,收缩 Linux 分区,给 Windows 安装腾出磁盘空间;

  • 安装 Windows 系统到腾出的磁盘空间,随后原先的 GRUB 引导程序会被 Windows 的引导程序附带,从而系统暂时只能启动 Windows;

  • 此时进入 Windows 系统,在设置中选择 “更改高级启动选项”,点击其中的 “高级启动” -> “立即重新启动”,即可进入原先的 Linux 系统;

更改高级启动选项

  • 进入 Linux 系统后,运行 os-proberupdate-grub 等程序,重新建立 GRUB 引导程序,实现 Windows/Linux 双系统引导。

参考链接:GRUB does not detect Windows

Last change: 2023-10-12, commit: 7dd3903