Linux

系统的安装

部分电脑是不支持安装 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。

SSH

SSH 路径的权限如下:

文件

权限

.ssh

744

id_rsa

600

剩余

644

硬件管理

散热

  1. 安装软件包 thermald

  2. 进行以下配置

systemctl enable --now thermald

硬盘

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

systemctl enable --now thermald fstrim.timer

电源管理

  1. 安装软件包 tlp-rdwethtool

  2. 进行以下配置

systemctl mask systemd-rfkill.service
systemctl mask systemd-rfkill.socket
systemctl enable --now 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

永久配置

  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 的自动补全功能查看。

临时配置

警告

所有更改会在重启后消失

modprobe zram
echo lz4 > /sys/block/zram0/comp_algorithm
echo 32G > /sys/block/zram0/disksize
mkswap --label zram0 /dev/zram0
swapon --priority 100 /dev/zram0

禁用 zram

  • 临时禁用只需要执行 swapoff /dev/zram0 或者 systemctl stop swap-create@zram0

  • 永久禁用只需要删除或清空文件 /usr/lib/systemd/zram-generator.conf

1

百度文库:zram

交换文件

创建交换文件用于 休眠

  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 重新生成内核。

双显卡

添加一下配置文件: 2

# /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 验证结果。

2

NVIDIA PRIME 配置笔记

使用 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

https://blog.nowcoder.net/n/3f051d15bfc6430c8d0d3d639829ddc4

更新固件

要更新固件,需要激活服务 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 3

3

How to remap keys in Ubuntu 18.04 (GNOME Shell)

系统日志

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 中被列出