系统的安装

部分电脑是不支持安装 Linux 的,这种情况下可以使用 rEFInd 你的进行中转:

  1. 安装 rEFInd 并解压

  2. refind.conf-sample 重命名为 refind.conf

  3. 进入带有管理员权限的 cmd 。运行以下命令:

    mountvol G: /s
    powershell
    cp refind G:\EFI\
    exit
    G:
    bcdedit /set {bootmgr} path EFI\refind\refind_x64.efi
    在编辑的时候, 路径必须要以 EFI 开头。

在安装完 Linux 后可以重新进入 Windows 并将启动项更改为 Grub。

硬件管理

散热

  1. 安装软件包 thermald

  2. 进行以下配置

systemctl enable --now thermald

硬盘

优化 SSD 设备的速度和寿命:

systemctl enable --now fstrim.timer

电源管理

一个可选方案是使用 tlp 来自动管理电量:

  1. 安装软件包 tlp-rdwethtool

  2. 进行以下配置

    systemctl mask systemd-rfkill.service
    systemctl mask systemd-rfkill.socket
    systemctl enable --now tlp

对于桌面环境来说,还有 power-profiles-daemon 用来提供类似 Windows 的电源管理:

  1. 安装软件包 power-profiles-daemon

  2. 进行以下配置:

    systemd enable --now power-profiles-daemon.service

重启后生效

power-profiles-daemon 和 tlp 是互斥的

软件优化

使用高性能的 dbus-broker

  1. 安装软件包 dbus-broker

  2. 启用服务

systemctl enable dbus-broker.service
systemctl --global enable dbus-broker.service

然后重启

为桌面用户预留资源

  1. 安装软件包 uresourced

  2. 进行以下设置

systemctl enable --now uresourced

GameMode

安装软件 gamemode

对于以下游戏,无需任何配置:

  • 古墓丽影:崛起

  • 全面战争传奇:不列颠尼亚王座

  • 全面战争:战锤 2

  • 尘埃 4

  • 全面战争:三国

否则:使用 gamemoderun 运行游戏。

改善低内存条件下的表现

systemctl enable --now systemd-oomd

zram

zram 可以作为交换分区或交换文件的替换。zram 通过在内存区域开辟交换空间,并对存入其中的数据进行压缩变相增加内存容量。通过在内存中开辟交换空间来避免在磁盘中进行分页从而提升了性能。在物理内存较少的情况下更是如此

  1. 安装软件包 zram-generator

  2. 创建文件并写入以下内容:

# /usr/lib/systemd/zram-generator.conf

[zram0]
zram-fraction = 1.0
max-zram-size = 8192

现在 直接重启 ,然后可以使用 free -h 查看交换空间的变化。

服务 systemd-zram-setup@zram0.service 是根据配置文件从 systemd-zram-setup@.service 自动派生出来的,其名字不一定非是如此,最好使用 bash 的自动补全功能查看。

交换文件

创建交换文件用于 休眠

  1. 执行以下代码:

    dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
    mkswap /swapfile
    swapon --priority 0 /swapfile
    # 编辑 /etc/fstab 文件
    /swapfile none swap defaults,pri=0 0 0

    这样,系统会尽可能少地使用交换文件用于交换,而只是用于休眠。

    使用 swapon --show 可以查看交换分区的情况。一般来说,zram 的优先级为 100。更倾向于被交换。swapfile 优先级为 0,一般只是用于休眠。

  2. 内核参数 中添加以下内容:

    resume=/dev/disk/by-uuid/swap_device resume_offset=swap_file_offset

    其中 swap_deviceswap_file_offset 分别使用 findmnt -no UUID -T /swapfilefilefrag -v /swapfile | awk '{ if($1=="0:"){print substr($4, 1, length($4)-2)} }' 查看。

  3. 添加内核钩子:

    # /etc/mkinitcpio.conf
    HOOKS=(...block resume ...)

    执行 mkinitcpio 重新生成内核。

双显卡

添加一下配置文件:[1]

# /etc/X11/xorg.conf.d/nvidia.conf
Section "ServerLayout"
   Identifier "layout"
   Screen 0 "iGPU"
   Option "AllowNVIDIAGPUScreens"
EndSection

Section "Device"
   Identifier "iGPU"
   Driver "modesetting"
   BusID "PCI:0:2:0"
EndSection

Section "Screen"
   Identifier "iGPU"
   Device "iGPU"
EndSection

Section "Device"
   Identifier "dGPU"
   Driver "nvidia"
EndSection

定义别名 :

alias nvrun="__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"

重启进 xorg 环境,运行 nvrun glxgears -info | grep GL_RENDERER 验证结果。

使用 NVIDIA 作为主显卡

电脑换了个 144Hz 的屏幕,游戏是空洞骑士能上 400 FPS。但是会出现 Xorg 卡死的问题。究其原因是集显的性能太弱。要在 Fedora 上使用 NVIDIA 作为主显卡,执行下面步骤:

  1. 添加 rpmfusion 源

  2. 执行 :

    sudo dnf in akmod-nvidia
    sudo cp /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf
  3. /etc/X11/xorg.conf.d/nvidia.conf 的 OutputClass 节中追加 :

    Option "PrimaryGPU" "yes"
  4. /etc/sddm/Xsetup 中追加 :

    xrandr --setprovideroutputsource modesetting NVIDIA-0
    xrandr --auto
就目前而言,Wayland 也可以使用 N 卡驱动

更新用户文件夹

控制台下先将语言设回英文: export LANG=en_US。

再将home目录下的文件夹名称进行更新: xdg-user-dirs-gtk-update, 弹出的界面点同意更改。

再将语言设回中文即可。export LANG=zh_CN

更新固件

要更新固件,需要激活服务 fwupd.service 。然后执行 :

$ fwupdmgr refresh
$ fwupdmgr update

ksmbd

首先需要现在并安装内核模块 :

git clone https://github.com/namjaejeon/ksmbd
dnf install kernel-devel-$(uname -r)
make
sudo make install
sudo modprobe ksmbd
sudo echo "ksmbd" >> /etc/modules-load.d/ksmbd.conf

然后需要安装用户空间工具 :

git clone https://github.com/cifsd-team/ksmbd-tools
./autogen.sh
./configure --prefix=/usr
make
sudo make install
# 安装配置
sudo mkdir -p /etc/ksmbd
sudo cp smb.conf.sample /etc/ksmbd/smb.conf
sudo cp ksmbd.service /usr/lib/systemd/system

另外,一个可选的 smb.conf 配置文件为:

# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
#
# Note:
# SMB1 is disabled by default. This means clients without support for SMB2 or
# SMB3 are no longer able to connect to smbd (by default).

[global]
   workgroup = WORKGROUP
   security = user

   passdb backend = tdbsam

   printing = cups
   printcap name = cups
   load printers = yes
   cups options = raw

   follow symlinks = yes
   wide links = yes
   unix extensions = yes

[homes]
   comment = Home Directories
   browseable = Yes
   read only = Yes
   inherit acls = Yes

[printers]
   comment = All Printers
   path = /var/tmp
   printable = Yes
   create mask = 0600
   browseable = No

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/drivers
   write list = @printadmin root
   force group = @printadmin
   create mask = 0664
   directory mask = 0775

然后进行配置并启动用户空间工具 :

ksmbd.adduser -a <username>
ksmbd.mountd

现在,ksmbd 已经在运行了,之后可以使用以下命令查看当前系统的 samba 共享情况 :

smbclient -L 127.0.0.1 -U%

重启 ksmbd 工具 :

ksmbd.control -s
ksmbd.mountd

Samba

尽管 GNOME 使用 WebDav 作为共享文件的方式,但是 Samba 毫无疑问依然是目前支持最广、最跨平台的共享方式。

建立 Samba 共享:

  1. 创建配置文件

    [global]
       workgroup = WORKGROUP
       server role = standalone server
    
       passdb backend = tdbsam
    
       printing = cups
       printcap name = cups
       load printers = yes
       cups options = raw
       # 日志
       log file = /var/log/samba/log.%m
       max log size = 50
    
       follow symlinks = yes
       wide links = yes
       unix extensions = no
    
       # 匿名用户支持
       security = user
       guest account = guest
       map to guest = bad user
    
       # usershare
       usershare path = /var/lib/samba/usershares
       usershare max shares = 100
       usershare allow guests = yes
       usershare owner only = yes
    [homes]
       comment = Home Directories
       browseable = yes
       writable = yes
       inherit acls = yes
    
    [printers]
       comment = All Printers
       path = /var/tmp
       printable = Yes
       create mask = 0600
       browseable = no
    
    [print$]
       comment = Printer Drivers
       path = /var/lib/samba/drivers
       write list = @printadmin root
       force group = @printadmin
       create mask = 0664
       directory mask = 0775
    
    # 匿名用户支持 & 公有用户支持
    [Guest]
       comment=RW dir for anyone
       path=/var/lib/samba/usershares/guest
       public=yes
       only guest = no
       writable = yes
  2. 创建匿名用户

    useradd guest -s /sbin/nologin
  3. 创建 Usershare 路径

    mkdir -p /var/lib/samba/usershares/guest
    groupadd sambashare
    chown root:sambashare /var/lib/samba/usershare
    chmod 1770 /var/lib/samba/usershare
    gpasswd sambashare -a your_username
  4. 创建 Samba 用户

    smbpasswd -a samba_user
  5. 为 Samba 打开相关的端口

    firewall-cmd --add-service=samba --zone=home --permanent
    firewall-cmd --add-service=samba-client --zone=home --permanent
    firewall-cmd --add-service=samba-dc --zone=home --permanent
  6. 赋予 Samba 相关的 SELinux 权限

    setsebool samba_export_all_ro on
    setsebool samba_enable_home_dirs on

然后重启服务即可

Samba 提供了两个服务:smb 和 nmb 。

  • smb 是主要的 Samba 服务程序

  • nmb 使局域网可以通过主机名访问共享文件

服务

Systemd 的服务文件位于 /\{etc,usr/lib,run}/systemd/system

键盘映射

对于 GNOME 和 KDE 而言,可以修改 `/usr/share/X11/xkb/symbols/pc`[2]

系统日志

systemd 日志

查看 systemd 日志使用 journalctl 工具。journalctl 的主要选项有:

选项

说明

-e

跳转到日志底部

-n

只显示最近的 n 行

-k

只显示内核消息

-x

使用解释性文本解释日志

-u

只显示指定服务的日志

--user

只显示用户服务日志

--since=

只显示以指定日期开始的日志

--until

只显示截止到指定日期的日志

例如查看 dbus-broker.service 的日志 :

journalctl -xu dbus-broker.service

查看用户服务 :

journalctl --user -xu dbus-broker.service

只查看今天的日志 :

journalctl -u dbus-broker.service --since yesterday --until=today | xsel -b

当报告 Bugs 时,不要使用 -x 选项

查看内核消息

尽管 systemd -k 也能查看内核日志,但是有时候使用 dmesg 会更加方便,而且 dmesg 是有高亮的。

其主要的参数有:

参数

说明

-H

使用人类友好的输出

-l

指定日志等级(使用 --help 查看)

-P

指定分页器

-u

打印用户空间消息

--since=

只显示以指定日期开始的日志

--until

只显示截止到指定日期的日志

查看实时日志

使用 tail -f 可以实时监控一个文件的内容

其它日志

系统的日志大部分被储存在了 /var/log 中,其目录结构类似于:

.
├── anaconda
│   ├── anaconda.log
│   ├── dbus.log
│   ├── dnf.librepo.log
│   ├── hawkey.log
│   ├── journal.log
│   ├── ks-script-*.log
│   ├── lvm.log
│   ├── packaging.log
│   ├── program.log
│   └── storage.log
├── audit
│   └── audit.log
├── boot.log-*
├── btmp-*
├── chrony
├── cron-*
├── cups
│   └── cups-pdf-Cups-PDF_log
├── dnf.librepo.log.*
├── dnf.log.*
├── dnf.rpm.log
├── firewalld
├── fsck_hfs.log
├── glusterfs
├── hawkey.log-*
├── journal
├── lastlog
├── libvirt
│   └── qemu
├── maillog-*
├── mariadb
├── messages-*
├── ppp
├── private
├── qemu-ga
├── samba
├── secure-*
├── speech-dispatcher
├── spooler-*
├── sssd
│   └── sssd_kcm.log-*
├── swtpm
│   └── libvirt
├── tallylog
├── wpslog
├── wtmp
└── Xorg.0.log

另外,对于普通用户而言,一些日志被储存到了 ~/.cache 路径下

查看硬件温度

使用 sensors 和 nvidia-smi 命令可以查看温度和 NVIDIA 显卡的温度

KDE 主题位置

KDE 的主题位于以下位置:

位置

用途

~/.local/share/plasma/desktoptheme

plasma 主题

~/.local/share/plasma/look-and-feel/

全局主题

~/.local/share/plasma/plasmoids/

插件

~/.local/share/aurorae/themes

窗口装饰

~/.local/share/color-schemes

颜色

~/.local/share/konsole/

konsole 主题

~/.config/Kvantum

kvantum 主题

另外,kde 使用 drkonqi 作为 Debug Handler。对于 Fedora 而言需要安装 plasma-drkonqi,具体用法参见 https://github.com/KDE/drkonqi

rpm 安装源码包

yumdownloader --source kvantum
yum install mock
useradd -s /sbin/nologin mockbuild
rpm -ivh ./kvantum-1.0.0-1.fc35.src.rpm
cd ~/rpmbuild

修改 exif 信息

例如 :

exiftool -Orientation="Rotate 270 CW" 1.jpg -O 8.jpg

所有支持的元信息在 https://www.exiftool.org/TagNames/EXIF.html 中被列出

Linux 系统假死的解决办法

Linux 系统有时因为软件不兼容或未知 bug,导致系统假死。比如我的 Ubuntu 14.04 最近使用 vscode 时偶尔会导致系统假死,即鼠标可以移动,但点击无反应。

此时可试试如下解决方案:

  • 进入 TTY 模式

    1. Ctrl + Alt + F1 登录 TTY 模式

    2. 输入 top 查看导致系统假死的进行 PID,直接 sudo kill xxx

    3. exit 退出 TTY 模式

    4. Ctrl + Alt + F7 回到图形接口模式

  • 终极解决方案 reisub

    1. 左手按住 Alt,右手按一下 PrtSc (即开始系统请求 Sys_Rq)

    2. 左手不要松 Alt,每隔两秒,右手依次再按 r e i s u b

    3. 系统会自动重启

      含义依次如下:

      按键

      含义

      r

      unRaw 将键盘控制从 X Server 那里抢回来

      e

      tErminate 给所有进程发送 SIGTERM 信号,让它们自己解决善后

      i

      kIll 给所有进程发送 SIGKILL 信号,强制他们马上关闭

      s

      Sync 将所有数据同步至磁盘

      u

      Unmount 将所有分区挂载为只读模式

      b

      reBoot 重启

注意:因为上述的每个操作,可能需要一些时间才能完成,所以,最好按完一个键,隔几秒,再按下一个键

Windows 中的 Xorg

  1. 下载 VcXsrv

  2. 点击 XLaunch → 下一步 → 下一步 → 勾选 Disable access control → 下一步 → 完成

  3. 进入 WSL 中,在 .bashrc 中追加 export DISPLAY=\'cat /etc/resolv.conf | grep server | awk '{print $2}'\':0

对于只需要剪贴板功能的人而言,第三步可以直接使用 export DISPLAY=localhost:0

WSL 的自定义:

我使用的 WSL 时白嫖的 GitHub 上的 FedoraRemix:

  1. 设置 /etc/dnf/dnf.conf 为:

    [main]
    gpgcheck=0
    installonly_limit=3
    clean_requirements_on_remove=True
    # assumeyes=True
    install_weak_deps=False
    tsflags=nodocs
  2. 设置中文:安装 glibc-langpack-zh.x86_64langpacks-zh_CN.noarch ,并设置

    export LC_ALL='zh_CN.utf8'
    export LANG='zh_CN.utf8'

nfs

firewalld 需要打开的服务为 nfs, rpcbind, nfs, mountd

例如:

firewall-cmd --zone=libvirt --permanent --add-service=mountd,nfs,nfs3

音频系统

触摸板

要使用三指拖动,安装包 aur/libinput-three-finger-drag

Steam

Steam 相关的路径为:

Proton 存档的位置位于 ~/.steam/steam/steamapps/compactdata/xxxx/pfx 文件夹下

自定义 Proton 放在 ~/.steam/root/compatibilitytools.d/

自定义兼容工具不支持软链接

sudo

sudo 的一些进阶技巧:

命令

作用

sudo !!

执行上一条 sudo 命令

sudo -b

后台执行命令

sudo -e

使用特权用户编辑文件

sudo -u

以指定用户运行命令

sudo -v

延长 sudo 凭据期限

sudo -l -U

显示指定用户的权限

使用 lz4

tar -I lz4 -cf archive.tar.lz4 stuff to add to archive
tar -I lz4 -xf archive.tar.lz4

光线追踪

使用光线追踪需要使用以下启动参数 :

VKD3D_CONFIG=dxr PROTON_HIDE_NVIDIA_GPU=0 PROTON_ENABLE_NVAPI=1 %command%

禁用看门狗

看门狗在个人笔记本上不是必须的,而且还会导致开关机变慢

编辑 /etc/modprobe.d/watchdog.conf 并添加以下内容 :

blacklist iTCO_wdt

pacman 安装所有可选依赖

执行 :

pacman -S expat
sudo pacman -S --asdeps `expac -S '%o' wine`

DNS 设置

systemd-resolved

使用 systemd-resolved 是最简单的 DNS 设置方法。只需要执行 :

sudo systemd enable --now systemd-resolved.service
sudo ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

即可

systemd-resolved 提供了 DNS 缓存、DNS Over TLS 功能。但是没有提供持久化功能。

可以使用:

  • systemd-resolve 来解析域名

  • systemd-resolve --status 查看 systemd-resolved 状态

  • systemd-resolve --statistics 查看 systemd-resolved 的统计信息

smartdns

smartdns 是小米的一款 DNS 服务器。优势在于:

  • 支持 DNS/UDP、DNS/TCP、DNS/TLS、DNS Over HTTPS 功能

  • 从上游 DNS 服务器中选择最快的 IP 地址

  • 缓存与数据持久化

执行以下指令 :

sudo pacman -S community/smartdns

sudo rm /etc/resolv.conf
sudo touch /etc/resolv.conf

编辑文件 sudo -e /etc/NetworkManager/conf.d/dns-servers.conf 并写入以下内容 :

[global-dns-domain-*]
servers=::1,127.0.0.1

编辑文件 sudo -e /etc/smartdns/smartdns.conf 并写入以下内容 :

bind [::]:53

cache-size 4096
cache-persist yes
cache-file /var/cache/smartdns.cache

log-level info
log-file /var/log/smartdns.log

server 8.8.8.8
server 8.8.4.4

server-https https://1.1.1.1/dns-query
server-https https://1.0.0.1/dns-query
server-https https://cloudflare-dns.com/dns-query
server-https https://dns.quad9.net/dns-query
server-https https://doh.dns.sb/dns-query
server-https https://doh.sb/dns-query
server-https https://doh.opendns.com/dns-query
server-https https://doh.pub/dns-query
server-https https://dns.alidns.com/dns-query
server-https https://dns.google/dns-query

然后执行 :

sudo systemd enable --now smartdns.service
sudo sstemd restart NetworkManager.service

可能需要重启后才会生效

高刷屏

转自

对于 155 Hz 的屏幕,由于 Intel 驱动的限制,会导致屏幕不显示 155 Hz 的选项。这种情况下需要手动修改 Intel 驱动:

  1. 首先拷贝驱动文件: cp /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/card0-eDP-1/edid ~/edid.bin

  2. 使用 aw_edid_editor 编辑此文件

  3. "Detailed Data" → "CVT 1.2 Wizard" 然后设置刷新率

  4. 将 edid.bin 拷贝到 /lib/firmware/edid/edid.bin

  5. 添加内核参数 drm.edid_firmware=eDP-1:edid/edid.bin

  6. 创建文件 /etc/initcpio/install/edid 加入一下内容,并赋予其 可执行权限

    #!/bin/bash
    
    build() {
        add_file /lib/firmware/edid/edid.bin
    }
    
    help() {
        cat <<HELPEOF
    This hook add support for 165Hz
    HELPEOF
    }
  7. /etc/mkinitcpio.conf HOOKS 的末尾加上 edid

  8. 运行 sudo update-initramfs -u

EasyEffects

要使用 EasyEffects,需要:

sudo pacman -S pipewire lib32-pipewire
sudo pacman -S --asdeps `expac -S '%o' pipewire` --needed
sudo pacman -S --asdeps `expac -S '%o' lib32-pipewire` --needed
sudo pacman -S wireplumber

重启后生效。如果不会自动切换暗色模式,需要安装:

sudo pacman -S xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-kde

根本原因是 EasyEffects 现在依赖于 pipewire 提供声音,而并不是传统的 alsa

蜂鸣声

KDE 的响铃可以通过 系统设置→无障碍辅助→响铃 关闭。但是更广泛的响铃(例如通过 beep 命令发出的响铃)可以通过禁用内核模块以彻底关闭:

# /etc/modprobe.d/pcspkr.conf
blacklist pcspkr

安全

内核锁定:

设置内核参数:

lsm=landlock,lockdown,yama,bpf lockdown=none

其中 lockdown 的参数为 none, integrity, confidentiality

内核锁定状态可以通过以下命令查看 :

/sys/kernel/security/lockdown

内核锁定会导致 nvidia 的驱动不可用

DMA 保护:

DMA 保护主要是针对雷电接口,其设置位置在 UEFI 中,系统中无法更改,但是可以通过以下命令查看状态 :

cat /sys/bus/thunderbolt/devices/domain0/iommu_dma_protection

audit:

要让 auditd 能审计所有进程,需要在内核参数中加入 :

audit=1

flatpak

添加映射的目录 :

flatpak override --filesystem=$HOME/.themes
flatpak override --filesystem=xdg-config/Kvantum:ro
flatpak override org.gnome.Calculator --filesystem=$HOME/.themes
flatpak override --show

上述将主题文件夹映射到 flatpak 中,使得 flatpak 中的软件可以访问主机中的主题。

flatpak 无法将 /usr 中的路径进行映射

挂载 VHDX 文件

使用 libguestfs-tools 可以在 Linux 中挂载 VHDX 文件,用法为:

guestmount --add yourVirtualDisk.vhdx --inspector --ro /mnt/anydirectory

重启系统

当使用常规重启手段无法重启后,可以使用下面的方法:[3]

命令作用

reboot -nf

跳过 sync 和 init 过程,直接关机

echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger

直接发送重启命令到内核

echo 1 > /proc/sys/kernel/sysrq echo o > /proc/sysrq-trigger

直接发送关机命令到内核

modprobe softdog
cat /dev/watchdog

这时系统日志显示:

softdog: Unexpected close, not stopping watchdog!

这就表示 watchdog 设备是被意外关闭的而不是正常停止的,大约等待 60 秒之后你就会发现 Linux 系统自动重启了。Linux watchdog 的异常等待时间是通过 /proc/sys/kernel/watchdog_thresh 设置的,一般默认为 60 秒。

modprobe ipmi_msghandler ipmi_devintf ipmi_si
ls -l /dev/ipmi* # 确认 IPMI 设备是否已找到:
ipmitool power reset # 重启
ipmitool power off # 关机

使用 IPMI (前提是系统支持)

zsh

zsh 配置文件加载顺序:

  1. /etc/zshenv

  2. ~/.zshenv

  3. /etc/zprofile

  4. ~/.zprofile

  5. /etc/zshrc

  6. ~/.zshrc

  7. /etc/zlogin

  8. ~/.zlogin

  9. ~/.zlogout

  10. /etc/zlogout

Last moify: 2025-01-17 02:01:39
Build time:2025-07-18 09:41:42
Powered By asphinx