系统的安装
部分电脑是不支持安装 Linux 的,这种情况下可以使用 rEFInd 你的进行中转:
安装 rEFInd 并解压
将 refind.conf-sample 重命名为 refind.conf
进入带有管理员权限的 cmd 。运行以下命令:
mountvol G: /s powershell cp refind G:\EFI\ exit G: bcdedit /set {bootmgr} path EFI\refind\refind_x64.efi
在编辑的时候, 路径必须要以 EFI 开头。
在安装完 Linux 后可以重新进入 Windows 并将启动项更改为 Grub。
硬件管理
散热
安装软件包
thermald
进行以下配置
systemctl enable --now thermald
硬盘
优化 SSD 设备的速度和寿命:
systemctl enable --now fstrim.timer
电源管理
一个可选方案是使用 tlp 来自动管理电量:
安装软件包
tlp-rdw
和ethtool
进行以下配置
systemctl mask systemd-rfkill.service systemctl mask systemd-rfkill.socket systemctl enable --now tlp
对于桌面环境来说,还有 power-profiles-daemon 用来提供类似 Windows 的电源管理:
安装软件包
power-profiles-daemon
进行以下配置:
systemd enable --now power-profiles-daemon.service
重启后生效
power-profiles-daemon 和 tlp 是互斥的 |
软件优化
使用高性能的 dbus-broker
安装软件包
dbus-broker
启用服务
systemctl enable dbus-broker.service
systemctl --global enable dbus-broker.service
然后重启
为桌面用户预留资源
安装软件包
uresourced
进行以下设置
systemctl enable --now uresourced
GameMode
安装软件 gamemode
对于以下游戏,无需任何配置:
古墓丽影:崛起
全面战争传奇:不列颠尼亚王座
全面战争:战锤 2
尘埃 4
全面战争:三国
否则:使用 gamemoderun
运行游戏。
改善低内存条件下的表现
systemctl enable --now systemd-oomd
zram
zram 可以作为交换分区或交换文件的替换。zram 通过在内存区域开辟交换空间,并对存入其中的数据进行压缩变相增加内存容量。通过在内存中开辟交换空间来避免在磁盘中进行分页从而提升了性能。在物理内存较少的情况下更是如此
安装软件包
zram-generator
创建文件并写入以下内容:
# /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 的自动补全功能查看。 |
交换文件
创建交换文件用于 休眠
执行以下代码:
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,一般只是用于休眠。
在 内核参数 中添加以下内容:
resume=/dev/disk/by-uuid/swap_device resume_offset=swap_file_offset
其中 swap_device 和 swap_file_offset 分别使用
findmnt -no UUID -T /swapfile
和filefrag -v /swapfile | awk '{ if($1=="0:"){print substr($4, 1, length($4)-2)} }'
查看。添加内核钩子:
# /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 作为主显卡,执行下面步骤:
添加 rpmfusion 源
执行 :
sudo dnf in akmod-nvidia sudo cp /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf
在
/etc/X11/xorg.conf.d/nvidia.conf
的 OutputClass 节中追加 :Option "PrimaryGPU" "yes"
在
/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 共享:
创建配置文件
[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
创建匿名用户
useradd guest -s /sbin/nologin
创建 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
创建 Samba 用户
smbpasswd -a samba_user
为 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
赋予 Samba 相关的 SELinux 权限
setsebool samba_export_all_ro on setsebool samba_enable_home_dirs on
然后重启服务即可
Samba 提供了两个服务:smb 和 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 模式
Ctrl + Alt + F1 登录 TTY 模式
输入 top 查看导致系统假死的进行 PID,直接 sudo kill xxx
exit 退出 TTY 模式
Ctrl + Alt + F7 回到图形接口模式
终极解决方案 reisub
左手按住 Alt,右手按一下 PrtSc (即开始系统请求 Sys_Rq)
左手不要松 Alt,每隔两秒,右手依次再按 r e i s u b
系统会自动重启
含义依次如下:
按键
含义
r
unRaw 将键盘控制从 X Server 那里抢回来
e
tErminate 给所有进程发送 SIGTERM 信号,让它们自己解决善后
i
kIll 给所有进程发送 SIGKILL 信号,强制他们马上关闭
s
Sync 将所有数据同步至磁盘
u
Unmount 将所有分区挂载为只读模式
b
reBoot 重启
注意:因为上述的每个操作,可能需要一些时间才能完成,所以,最好按完一个键,隔几秒,再按下一个键
Windows 中的 Xorg
下载 VcXsrv
点击 XLaunch → 下一步 → 下一步 → 勾选 Disable access control → 下一步 → 完成
进入 WSL 中,在 .bashrc 中追加
export DISPLAY=\'cat /etc/resolv.conf | grep server | awk '{print $2}'\':0
对于只需要剪贴板功能的人而言,第三步可以直接使用 export DISPLAY=localhost:0
WSL 的自定义:
我使用的 WSL 时白嫖的 GitHub 上的 FedoraRemix:
设置
/etc/dnf/dnf.conf
为:[main] gpgcheck=0 installonly_limit=3 clean_requirements_on_remove=True # assumeyes=True install_weak_deps=False tsflags=nodocs
设置中文:安装
glibc-langpack-zh.x86_64
和langpacks-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
音频系统
see: 概览 Linux 音频系统
字体
触摸板
要使用三指拖动,安装包 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 驱动:
首先拷贝驱动文件:
cp /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/card0-eDP-1/edid ~/edid.bin
使用 aw_edid_editor 编辑此文件
"Detailed Data" → "CVT 1.2 Wizard" 然后设置刷新率
将 edid.bin 拷贝到
/lib/firmware/edid/edid.bin
添加内核参数 drm.edid_firmware=eDP-1:edid/edid.bin
创建文件
/etc/initcpio/install/edid
加入一下内容,并赋予其 可执行权限 :#!/bin/bash build() { add_file /lib/firmware/edid/edid.bin } help() { cat <<HELPEOF This hook add support for 165Hz HELPEOF }
在
/etc/mkinitcpio.conf
HOOKS 的末尾加上 edid运行
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 | 直接发送关机命令到内核 |
| 这时系统日志显示: softdog: Unexpected close, not stopping watchdog! 这就表示 watchdog 设备是被意外关闭的而不是正常停止的,大约等待 60 秒之后你就会发现 Linux 系统自动重启了。Linux watchdog 的异常等待时间是通过 /proc/sys/kernel/watchdog_thresh 设置的,一般默认为 60 秒。 |
| 使用 IPMI (前提是系统支持) |
zsh
zsh 配置文件加载顺序:
/etc/zshenv
~/.zshenv
/etc/zprofile
~/.zprofile
/etc/zshrc
~/.zshrc
/etc/zlogin
~/.zlogin
~/.zlogout
/etc/zlogout