Linux个人AUR,GitHub,Flatpak加速进阶配置
在使用Linux时,虽然各大国内镜像已经可以覆盖大多数使用场景,但是部分场景仍然依赖不稳定的代理,甚至必须直连。对此,需要一些更加激进的手段。本文将结合个人解决方案,介绍针对AUR、GitHub与Flatpak的加速配置。 GitHub此段是AUR章节中一部分加速手段的前置条件。 GitHub的加速是老生常谈的问题了,除了教育网内部有专门的出口节点,其他大陆地区网络直接连接都慢的一批。虽然可以使用机场访问,但是下载大文件和git仓库的时候,不光大部分机场的带宽有限,消耗宝贵的流量配额也很令人心疼。对此,不少人贡献了自己的海外服务器来公益性地帮助国内用户下载,像GitHub Proxy这样的网站就提供了一个聚合这些节点的站点,方便个人用户使用。在GitHub站点页面中,可以使用GitHub-Fast油猴脚本来添加代理站点资源下载的链接,不用手动拼接URL了。 但是话又说回来了,授人以鱼不如授人以渔,与其用着别人的加速节点,不如自己部署一个加速节点,既不抢带宽,又不薅慷慨的人的羊毛。其中,最好的方案是使用Cloudflare Workers。Cloudflare作为路人皆知的互联网...
从autofs换用systemd automount自动挂载SMB
在过去的很长一段时间内,当Linux用户需要自动按需挂载远程的SMB到本地路径时,autofs都是首选。我也不例外,在我的ArchLinux上使用autofs来执行这个操作。然而,随着时间的推移,我越来越觉得autofs落后并且BUG频出(包括会阻塞式卡死Dolphin),特别是这玩意儿还在AUR里,更新起来非常麻烦。 于是乎问了一下D老师,告诉我其实systemd自带功能automount就能解决(systemd的恩情还不完\o/)。真是…绕了好大一圈啊… 配置步骤第一步:提供凭据123username=<用户名> password=<密码> domain=<工作组,此项可选> 文件名自选。 然后要把凭据文件的所有者变成root,权限改成600,否则cifs可能拒绝使用。 12sudo chown root:root /etc/samba/nas-credentials #如果你写凭据文件的时候没有用root的话 sudo chmod 600 /etc/samba/nas-credentials 第二步:配置systemd单元配置automount...
删除Grub的EFI BootNext启动项
问题描述前两天刚滚了一下ArchLinux,重启的时候发现Grub的启动项好像变长了不少。再重启一下,定睛一看,所有原来的启动项都多出了对应的一个新启动项,后面标着(EFI BootNext),很是碍眼。 啥是EFI BootNext?BootNext 是 UEFI 规范中定义的一个标准变量,存储在主板 NVRAM 中。它的作用是指定下一次开机时优先启动的条目,仅生效一次。 具体流程是这样的:操作系统或引导程序向 BootNext 写入一个启动项编号(如 Boot0001);下次开机时,UEFI 固件会读取这个变量,删除它,然后加载对应的启动项。这次启动结束后,系统就回到正常的 BootOrder 顺序,BootNext 已经不复存在。 为什么需要它?BitLocker 是关键在双系统场景下,从 Linux 重启到 Windows 有一个经典难题。如果你在 GRUB 里直接 chainload Windows 的 bootmgfw.efi,TPM 的 PCR 测量值会发生变化,BitLocker 会认为启动环境异常,进而弹出恢复密钥提示。 而通过设置 BootNext 变量来启动...
Armbian免重编译内核启用BBR
本文章由AI主导撰写,可能在部分地方的表述过于晦涩,敬请知晓。 问题Armbian 的部分内核配置里没有 BBR,这对于部分将开发板作为家用服务器的人来说是硬伤。以 Allwinner sunxi64 的 current 分支6.18.33 为例,内核 .config 里是: 1# CONFIG_TCP_CONG_BBR is not set 结果是 net.ipv4.tcp_available_congestion_control 里看不到 bbr,sysctl设 net.ipv4.tcp_congestion_control=bbr 会失败。 简单而言有三条路: 换内核 用 Armbian 的 build 框架重编整个内核 把 BBR 编成一个树外(out-of-tree)模块。 如果自己重新编译内核,不仅耗时耗力,还有可能丢失部分驱动和兼容性,因此本文选择自行编译树外模块。BBR算法由tcp_bbr.c提供且独立度很高,可以使用modprobe热加载,只要使用对应的内核headers,从对应的内核源码自行编译tcp_bbr.ko,然后丢到/lib/modeules/&...
Linux通过systemd指定网卡名称
这是netplan方案在其他发行版上不适用的情况下的终极解决方案,适用于有systemd的发行版。没有systemd的发行版可以使用udev规则。 没想到网卡名称随便乱动的毛病不只在Ubuntu上有,几乎所有发行版都有,当然也有可能是我设备犯了一些什么毛病导致的。 通用的方案是使用systemd link文件,通过MAC地址来匹配网卡。原理是利用systemd作为PID1的特殊权限,在内核工作完成后、所有应用与服务启动前匹配并修改网卡名称。这是最现代、最清晰的方法。 第一步:找到网卡的 MAC 地址首先,使用 ip link 命令列出所有网络接口,找到你想要修改名称的网卡及其 MAC 地址。 1ip link show 输出会类似这样: 122: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff...
让Yakuake不再需要手动开机自启
问题缘起Yakuake 是一款下拉终端,一个快捷键就可以便捷呼出,并且由于强制的标签页系统,可以做到多开时极低的内存占用。然而它有一个经典的问题:快捷键只有在 Yakuake 已经启动的情况下才能呼出或隐藏窗口。换句话说,如果你刚开机还没手动启动过 Yakuake,按下快捷键什么都不会发生。如果开机后手动点一下图标启动,每次开机后还要多一个“先启动 Yakuake”的步骤,实在是别扭。 基础的解决方案是开机自启,把 Yakuake 塞进桌面环境的自动启动列表里。但我不喜欢这种做法,因为假如途中Yakuake因为各种原因退出了,重启就还得手动启动。我更希望的是:按下快捷键时,如果 Yakuake 没启动就自动启动并展开;如果已经启动就正常切换显隐。 探索过程方案一:脚本 + sleep最直接的思路是写一个脚本,先检测 Yakuake 是否在运行,没运行就启动它,然后通过 D-Bus 调用来切换窗口状态: 1234567891011#!/bin/bash if pgrep -x "yakuake" > /dev/null; then dbus-send --type=met...
Mihomo fakeip模式作为DNS服务器导致未设置代理软件无法上网问题解决
前情提要由于smartdns在ArchLinux上安装并设置为开机自启后,会较大地拖慢系统到达graphical.target的时间(在critical-chain上显示会增加1s+),再加上同有DNS服务的mihomo也本来就是开机自启的,遂让mihomo的DNS监听127.0.0.1:5053,并使用systemd-resolved将其配置为系统DNS上游。 12345678dns: enable: true prefer-h3: true listen: 127.0.0.1:5053 ipv6: true use-hosts: true use-system-hosts: true enhanced-mode: fake-ip 这么配置后,浏览器访问所有网站均正常,但是本地的大部分软件都无法正常联网了。 工作原理为了理解这个问题是怎么发生的,我们需要理解mihomo代理的工作原理。 以下是传统的redir-host模式在仅代理模式(不承担系统DNS工作)下的工作方式: sequenceDiagram box 本地设备与代理 pa...
sched-ext在不同电源模式下的切换方法
sched-ext简介自 Linux 6.12 起,内核开始支持名为 sched-ext 的协议,它的作用是,允许用户使用自定义的CPU调度器覆盖内核原有的调度器,以实现更具有场景针对性的调度策略。与此同时,这个调度器可以在运行时快速热切换,而相比之下原本的调度器写死在内核中,想要更改只能重编译内核。此功能目前主要由 scx-scheds 程序实现。 我的选择我在我的 ArchLinux 笔记本上使用的是 scx_bpfland 调度器,这个调度器对12代的大小核有比较好的优化: 为什么适合大小核:bpfland 基于自愿上下文切换来精准识别“交互式任务”(如鼠标点击、窗口拖动、打字)。它会自动将这些高优先级交互任务提升至高性能大核(P核),同时将后台编译、日志同步等非交互任务挤压到能效小核(E核)上运行。 功耗表现:它的调度算法非常“克制”,不会盲目拉高CPU频率。在待机或轻载办公时,任务会尽可能留在E核,P核保持深度休眠,对笔记本续航非常友好。 交互流畅度:公认的“丝滑感”调度器,桌面响应速度极佳,在 sched_ext 社区是笔记本用户的口碑首选。 状态:生产就绪,...
Python脚本无法输出stdout到journald解决方案
现象当一个 systemd 服务的执行内容为一个python脚本时,在journalctl中无法观察到python脚本的stdout内容。 原因这是因为 Python 默认对 stdout 使用行缓冲,但在 systemd 环境下(非交互式终端)变成了全缓冲,导致日志在进程退出前才刷新。(骗你的,甚至可能退出了也不刷新) 解决方案两种解决方案: 1. 添加环境变量最方便的一个方案,添加一个PYTHONUNBUFFERED(Python unbuffered)环境变量,可以直接解决这个问题。systemd单元文件支持Environment参数,添加起来很方便。 12[Service] Environment="PYTHONUNBUFFERED=1" 2. 手动刷新在脚本中每次 print 后手动刷新。例如,添加 sys.stdout.flush(),或使用 print(..., flush=True)。 (我没试过方案2,方案1直接把事情解决了哈哈哈) 至此,问题解决。
个人starship配置分享
效果展示 显示完整的工作目录(home目录自动折叠) 异常退出错误码显示,兼容管道 用户名显示 Catppuccin Mocha配色方案 git与技术栈识别 此方案在distrobox中也可以使用!并且会自动在开头添加distrobox容器名称。 上配置!1234567891011121314151617181920212223242526272829303132333435363738394041424344454647palette = "catppuccin_mocha" [username] disabled = false style_user = "bold green" # 普通用户颜色 style_root = "bold red" # root 用户颜色 show_always = true # 始终显示用户名 [status] disabled = false format = '[$status]($style) ' # 显示格式,例如 [1] style = "bold red" # 失...
