######################################## Linux ######################################## 系统的安装 **************************************** 部分电脑是不支持安装 Linux 的,这种情况下可以使用 rEFInd 你的进行中转: #. `安装 rEFInd `_ 并解压 #. 将 *refind.conf-sample* 重命名为 *refind.conf* #. 进入带有管理员权限的 cmd 。运行以下命令: .. code-block:: bat mountvol G: /s powershell cp refind G:\EFI\ exit G: bcdedit /set {bootmgr} path EFI\refind\refind_x64.efi .. important:: 在编辑的时候, 路径必须要以 **EFI** 开头。 在安装完 Linux 后可以重新进入 Windows 并将启动项更改为 Grub。 SSH **************************************** SSH 路径的权限如下: .. csv-table:: :header: 文件, 权限 .ssh , 744 id_rsa, 600 剩余 , 644 硬件管理 **************************************** 散热 **************************************** #. 安装软件包 ``thermald`` #. 进行以下配置 .. code-block:: none systemctl enable --now thermald - `Fedora 33: 改善 CPU 的散热 `_ 硬盘 **************************************** 优化 SSD 设备的速度和寿命: .. code-block:: none systemctl enable --now thermald fstrim.timer - `在 Linux 中使用 SSD(固态驱动器):启用 TRIM `_ - `在 Linux 下使用 fstrim 延长 SSD 驱动器的寿命 `_ - `Fedora 32: 默认开启 fstrim.timer `_ 电源管理 **************************************** #. 安装软件包 ``tlp-rdw`` 和 ``ethtool`` #. 进行以下配置 .. code-block:: bash systemctl mask systemd-rfkill.service systemctl mask systemd-rfkill.socket systemctl enable --now tlp .. seealso:: - `tlp-rdw 官方文档 `_ 软件优化 **************************************** 使用高性能的 dbus-broker ======================================== #. 安装软件包 ``dbus-broker`` #. 启用服务 .. code-block:: bash systemctl enable dbus-broker.service systemctl --global enable dbus-broker.service 然后重启 - `Fedora 30: 使用 dbus-broker 作为默认 D-Bus 服务 `_ 为桌面用户预留资源 ======================================== - `Fedora 33: 为桌面用户预留资源 `_ #. 安装软件包 ``uresourced`` #. 进行以下设置 .. code-block:: bash systemctl enable --now uresourced GameMode ======================================== 安装软件 ``gamemode`` 对于以下游戏,无需任何配置: - 古墓丽影:崛起 - 全面战争传奇:不列颠尼亚王座 - 全面战争:战锤 2 - 尘埃 4 - 全面战争:三国 否则:使用 ``gamemoderun`` 运行游戏。 .. seealso:: - `GameMode 官方仓库 `_ - `GameMode:提高 Linux 游戏性能的工具 `_ 改善低内存条件下的表现 ======================================== .. code-block:: none systemctl enable --now systemd-oomd - `systemd-oomd `_ zram **************************************** zram 可以作为交换分区或交换文件的替换。zram 通过在内存区域开辟交换空间,并对存入其中的数据进行压缩变相增加内存容量。通过在内存中开辟交换空间来避免在磁盘中进行分页从而提升了性能。在物理内存较少的情况下更是如此。[#]_ 永久配置 ======================================== #. 安装软件包 ``zram-generator`` #. 创建文件并写入以下内容: .. code-block:: ini # /usr/lib/systemd/zram-generator.conf [zram0] zram-fraction = 1.0 max-zram-size = 8192 现在 **直接重启** ,然后可以使用 *free -h* 查看交换空间的变化。 .. note:: 服务 systemd-zram-setup@zram0.service 是根据配置文件从 systemd-zram-setup@.service 自动派生出来的,其名字不一定非是如此,最好使用 bash 的自动补全功能查看。 临时配置 ======================================== .. warning:: 所有更改会在重启后消失 .. code-block:: 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* .. seealso:: - :manpage:`zram-generator(8)` - :manpage:`zram-generator.conf(5)` - `官方 GitHub 仓库 `_ - `Fedora:SwapOnZRAM `_ - :manpage:`systemd.service(5)` - `Fedora 33:将 ZRAM 扩展到完整内存大小 `_ .. [#] `百度文库:zram `_ 交换文件 **************************************** 创建交换文件用于 **休眠** #. 执行以下代码: .. code-block:: 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,一般只是用于休眠。 #. 在 `内核参数 `_ 中添加以下内容: .. code-block:: none 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)} }'`` 查看。 #. 添加内核钩子: .. code-block:: ini # /etc/mkinitcpio.conf HOOKS=(...block resume ...) 执行 ``mkinitcpio`` 重新生成内核。 .. seealso:: - `Arch Linux 休眠到文件 `_ - `Power management/Suspend and hibernate - ArchWiki `_ - `Swap - ArchWiki `_ 双显卡 **************************************** 添加一下配置文件: [#依云nv]_ .. code-block:: none # /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* 验证结果。 .. seealso:: - `笔记本不连接电源时的各种奇怪问题 `_ .. [#依云nv] `NVIDIA PRIME 配置笔记 `_ 使用 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 #. 在 :file:`/etc/X11/xorg.conf.d/nvidia.conf` 的 OutputClass 节中追加 :: Option "PrimaryGPU" "yes" #. 在 :file:`/etc/sddm/Xsetup` 中追加 :: xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto .. note:: 就目前而言,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 配置文件为: .. code-block:: ini # 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 ksmbd.mountd 现在,ksmbd 已经在运行了,之后可以使用以下命令查看当前系统的 samba 共享情况 :: smbclient -L 127.0.0.1 -U% 重启 ksmbd 工具 :: ksmbd.control -s ksmbd.mountd .. seealso:: - `KSMBD - SMB3 Kernel Server `_ Samba **************************************** 尽管 GNOME 使用 WebDav 作为共享文件的方式,但是 Samba 毫无疑问依然是目前支持最广、最跨平台的共享方式。 建立 Samba 共享: #. 创建配置文件 .. code-block:: ini [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 #. 创建匿名用户 .. code-block:: bash useradd guest -s /sbin/nologin #. 创建 Usershare 路径 .. code-block:: bash 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 用户 .. code-block:: bash smbpasswd -a samba_user #. 为 Samba 打开相关的端口 .. code-block:: bash 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 权限 .. code-block:: bash setsebool samba_export_all_ro on setsebool samba_enable_home_dirs on 然后重启服务即可 .. note:: Samba 提供了两个服务:smb 和 nmb 。 - smb 是主要的 Samba 服务程序 - nmb 使局域网可以通过主机名访问共享文件 .. seealso:: - `Samba (简体中文) `_ 服务 **************************************** Systemd 的服务文件位于 */{etc,usr/lib,run}/systemd/system* 键盘映射 **************************************** 对于 GNOME 和 KDE 而言,可以修改 :file:`/usr/share/X11/xkb/symbols/pc` [#键盘映射ref]_ .. [#键盘映射ref] `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 .. note:: 当报告 Bugs 时,不要使用 -x 选项 查看内核消息 ======================================== 尽管 :command:`systemd -k` 也能查看内核日志,但是有时候使用 :command:`dmesg` 会更加方便,而且 dmesg 是有高亮的。 其主要的参数有: +----------+----------------------------------+ | 参数 | 说明 | +==========+==================================+ | -H | 使用人类友好的输出 | +----------+----------------------------------+ | -l | 指定日志等级(使用 --help 查看) | +----------+----------------------------------+ | -P | 指定分页器 | +----------+----------------------------------+ | -u | 打印用户空间消息 | +----------+----------------------------------+ | --since= | 只显示以指定日期开始的日志 | +----------+----------------------------------+ | --until | 只显示截止到指定日期的日志 | +----------+----------------------------------+ 查看实时日志 ======================================== 使用 :command:`tail -f` 可以实时监控一个文件的内容 其它日志 ======================================== 系统的日志大部分被储存在了 :file:`/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 另外,对于普通用户而言,一些日志被储存到了 :file:`~/.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 主题 | +--------------------------------------+--------------+ .. note:: 另外,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 .. seealso:: - `Linux 安装.src.rpm源码包的方法-阿里云开发者社区 `_ 修改 exif 信息 **************************************** 例如 :: exiftool -Orientation="Rotate 270 CW" 1.jpg -O 8.jpg 所有支持的元信息在 https://www.exiftool.org/TagNames/EXIF.html 中被列出