Ovear's Blog

I'am Ovear,Ovear is me.

Theme Refrain made by Eiko

Proudly powered by WordPress

作者: Ovear

修改KDE Dolphin的默认视图/排序

前言

作为Linux桌面用户,近几年在使用Arch Linux + KDE作为日常操作系统时,我一直都对KDE挺满意的,虽然也遇到了大大小小不少Bug(但是比起Windows 11来说,感觉还是能好一些的);其中一个最主要的原因就是KDE通过一些调整,能够兼容大部分我从Windows上带来的习惯,换句现在流行的形容方式就是可切换性/兼容性更好。

文件管理器方面,Dolphin稍微调整过后还是比较顺手的;KDE自带的Dolphin可以设定两个视图记忆模式,一个是默认的“统一所有文件夹的显示风格”,另一个是我个人比较习惯的“单独记忆每个文件夹的显示风格”。

但是一直以来有一个比较难受的地方就是:虽然Dolphin会记忆每个文件夹的“显示风格”,主要就是排序和显示列表之类的,但是每次进入一个新的文件夹,或者未设定过的文件夹时,就会恢复默认的设定。这个默认的设定机缘巧合的情况下,被设定为了“按照修改时间倒叙排列”,导致每次进入文件夹时我都得手动调整一下,实在令人不爽;今天恰好有空就来解决一下这个问题。

TLDR:方案三最佳,方案一也可以,太闲了或者对你恰好有强迫症,或者实现有兴趣可以看看方案二。

Linux中查看PCI相关信息

前言

最近排查OpenWrt的一些问题时,在宿主机的内核日志中发现了一些pci相关的错误;需要具体检查下是哪个设备抛出的错误,遂有了这篇流水账记录。

PS:不知道是不是因为年龄的增长还是什么原因,感觉现在越来越开始依赖外部工具了(主要是感觉记忆力没有以前好了;也可能是强迫症/ADHD大发作);为了避免“青年痴呆”找上门,还是得多写写,多记录记录 (:з」∠),留一点赛博记忆在这;没准以后真有用得着的时候(还是希望不要用得上吧.jpg)。

lspci

lspci: 列出当前的pci设备信息,显示设备名
lspci -n: 列出当前的pci设备信息,以 vendor_id:product_id 形式显示设备
lspci -nn: 列出当前的pci设备信息,同时显示设备名和ID
lspci -t: 以层级/结构化方式显示pci设备信息
lspci -v[v]: 详细显示pci设备信息
lspci -s: 通过设备地址过滤显示的设备
lspci -d: 通过设备id/class来过滤显示的设备

如果要查询某个设备的上级设备,可以通过lspci -t结构化显示设备层级,在通过lspci -s过滤显示。
如果要查询某个设备的下级设备(如PCI Host下挂设备),除了通过lspci -t的方式以外,还以为通过lspci -v -s addr来显示次级PCI Bus;再通过lspci -s来过滤显示该次级PCI Bus的设备。

排查OpenWrt DNS自动消失的问题

前言

最近遇到一个奇怪的问题,偶尔/tmp目录满了之后,一段时间内就一定会导致/tmp/resolv.conf.d/resolv.conf.auto文件被清空,dnsmasq无法找到上级转发DNS导致断网。 但是查看文件修改时间,如果可用空间一直充足,这个文件的修改时间也不会发生变化;一旦没有可用空间,这个文件就会被替换为空文件。

谁动了reslove.conf

首先确认下该文件的同于是dnsmasq用于确认转发DNS请求的上级服务器,在luci中可以设定。

既然是写入luci,目标那基本就是netifd这个库;这个库主要职责就是OpenWrt中绝大多数和网络相关配置。

通过搜索我们可以确认__interface_write_dns_entries这个函数负责实际的写入resolve;通过下面其唯一调用者interface_write_resolv_conf的代码,我们就可以确认这件事的元凶。

解决PipeWire无法切换到Redmi电脑音箱的问题

前言

前两个月在滚Arch的时候,发现滚完之后就无法将Redmi电脑音响设置为默认设备了,一番查找之后发现是PipeWire更新导致的。检查升级记录之后,确认从PipeWire 1.0.5开始就会出现这个问题,不管是用KDE的GUI设定为默认设备,还是通过PipeWire和WirePlumber的CLI都不行。

因为一直没空寻找具体原因,也就直接采用降级大法解决,但是经常会出现开机时初始化PipeWire卡死的问题,还是有点不方便;这两天终于抽空彻底排查了以下。

原因

既然确定了出现问的版本,接下来的事情就很简单了。通过在git提交中搜寻,最终确定了引入该问题的commit是这个cc841a76

查找的方法使用算法里面经典的图书管理员秘法之二分查找,最开始的时候还是手动二分查找的,后来想到vcs八成有自带这个功能,一搜发现是git bisect;果然大佬们早就想到这个排查bug的方法,今天又学到了新知识很开心,几次搜索之后就将出现问题的commit找到了。

解决方法

既然找到了引入问题的commit,在提交官方处理的同时,revert这个commit就自然成为目前的dirty workaround了。

将pipewire打包项目从Arch仓库中clone下来,引入下面这个patch,之后在PKGBUILD中应用就大功告成了,具体方法:把下面的patch文件拷贝到仓库所在的文件夹中,在PKGBUILDprepare方法中使用git apply ../0001-Revert-acp-add-more-properties-for-the-card.patch

0001-Revert-acp-add-more-properties-for-the-card

最后使用pacman -U安装pipewire-audio这个包就足够了;无意中发现pipewire拆成多个包之后,不同的版本搭配其实也是可以用的,比如说pipewire-audio可以用老点的版本(最新版把我小主机内置音响更没了,虽然不常用吧,但是还是能用用的;等官方处理完这个问题再看看好了没吧,没好再去发个issue看看;主要是遇到了PipeWire的大版本更新,整个设备结构和Profile都变了,估计没这么好查了),其他包用最新版,除了开机时偶尔会卡死无法正常初始化,但是成功之后没有用出什么太大问题。

尾巴

希望能够快点解决吧,这里留一个issue连接作为记录。

使用tcpdump抓取DHCP/DHCPv6封包

最近在诊断一些ICMP/DHCP问题,使用wireshark的display filter可以直接使用icmp6 or dhcpv6,但是如果是capture filter就不支持dhcpv6这样的语法了。

查询官网文档后发现,wireshark的display filter和capture filter还不一样,前者是wireshark自己解析的高级语法,后者是pcap语法,和tcpdump一样,只支持一些基础过滤。

ICMP/ICMPv6的过滤pcap直接支持,DHCP/DHCPv6使用固定的udp端口,所以可以通过端口过滤实现。

DHCP:56、57
DHCPv6:546、547

比如想过滤DHCPv6和ICMPv6的数据包,则过滤语法为icmp6 or (udp port 546 or 547 )

修改802.1p解决宽带丢包

发生了什么

群里的Lihz菊苣最近在使用广州联通的时候遇到了宽带ICMP丢包/前几个包必丢的问题,经过一番研究确认了是光猫中802.1p的设定值的问题。

802.1p标记用于标记业务优先级,取值为0-7,优先级最低为0,最高为7,优先级越高,保障等级越高,具体可以参考Wiki。

修改方式

如果是使用的光猫,通过超级管理员账号进入光猫后台,在WAN设置中找到Internet那一条WAN,编辑设置中的802.1p就可以了。

猫棒得看对应固件中支持否有相关选项,如果不支持的话可能暂时就无法修改。

找到对应设置的地方后,设置优先级为最高,即802.1p为7就没再出现问题。初步猜测原因可能是运营商设备设置错误(Lihz菊苣使用的广州联通还下发的是/64的IPv6 PD,很明显还没经过改造,不符合工信部最新的文件中关于IPv6二次下发的要求),直接使用了来自设备端的802.1p值0,即默认为最低优先级;在网络尖峰期,设备资源不足的时候因优先级不足而丢弃;按照通常配置该值一般都会被运营商覆盖掉。

备份记录

这里记录一下默认值,因为都是使用了原厂/非对应运营商的光猫所以该值仅供参考。

广东电信(MA5671原厂固件):0
广东联通(HS8145C5/2584.A/2021电信版):0
广东联通(HS8145C5/180F.A/2019电信版):0

PS:其他业务WAN的默认802.1p值
TR069:7
OTHER/IPTV:5

OpenWrt中降低preferred_time和valid_time增加IPv6的稳定性

前言

2024年的今天,在各方积极的推动下,大陆IPv6的覆盖率已经非常高了;三大运营商新开的家庭宽带已经默认开通了IPv6,现存的宽带也通过改造、下发配置、设备更新的方式在迅速的推进中;而移动端则更是激进,在4G部署时就已经是按照双栈网路配置,可以说是完全覆盖,连二级热点都已经做足了充分的兼容。

就在几天前,工信部还发了一份《两部门关于开展“网络去NAT”专项工作 进一步深化IPv6部署应用的通知》的文件,其中的目标是在进一步的推进IPv6的积极应用的同时,开始为IPv4的NAT网路去除做准备(目前阶段主要关注NAT44设备规模停止增长),同时也提出了IPv6子网标准化要求,要求对IPv6网路的二次分发功能做好兼容。

Ovear自己家的网络在大约五六年前,三大运营商开通IPv6基本厘清大陆内的交换路由后,就实装进来了,也算是见过IPv6早期混乱路由的资深用户了(笑)。

iptables-extensions中socket模块是个啥?

今天看到这个叫做socket的iptables 模块挺有意思的,但是没有找到太多的资料;想了想翻译一下文档,应该可以作为理解一下这个模块的作用的开始。

(然而发现并不能,所以又研究了一大堆相关的其他东西,就有了这一篇)

文档

   socket
       如果能通过分组执行socket搜索后,能够找到一个打开的TCP/UDP
       socket,则会进行匹配。具体来说,这会匹配一条已建立(establshed)
       的链接,或者非0绑定监听器(不是监听0.0.0.0或者::/非INADDR_ANY)
       socket(比如说有可能是非本地地址)。搜索是通过TCP/UDP分组的元
       组进行的,对于ICMP/ICMPv6错误分组来说,则是使用内嵌在内的原始
       TCP/UDP头部中的元组。

       --transparent
              忽略非透明(non-transparent) sockets.

       --nowildcard
              不要忽略绑定在'任意'地址的sockets。默认情况下,不会
              匹配0绑定监听器;因为在那种情况下,本地的服务可以
              拦截本来会被转发的流量。因此,在匹配使用策略路由重
              定向到本地的转发流量时,本选项有安全影响。当使用
              socket 匹配器来实现绑定在非本地地址的完全透明代理
              时,更推荐使用 --transparent 选项。

       例如(假如被标记为1的分组会被发送到本地):

              -t mangle -A PREROUTING -m socket --transparent -j MARK
              --set-mark 1

       --restore-skmark
              将分组标记设置为匹配到的socket的标记。可以和 --transparent
              以及 --nowildcard 选项组合使用来限制恢复分组标记时匹配的
              sockets。

       例如:一个打开了2个透明(IP_TRANSPARENT)的sockets,并
       使用SO_MARK选项设置了一个标记。我们可以这样过滤匹配的分组:

              -t mangle -I PREROUTING -m socket --transparent --restore-
              skmark -j action

              -t mangle -A action -m mark --mark 10 -j action2

              -t mangle -A action -m mark --mark 11 -j action3

记一次因CONNTRACK和ICMP导致的奇怪问题

起因

策略路由是个好东西,就是用起来特别麻烦,经常产生一些很奇怪的问题,这次遇到的问题也是特别迷惑。

有一条规则会使用CONNTRACK对链接进行分类,然后把整个链接打上标记,如果不符合任何规则就打一个默认标记。

这条规则看起来一点问题都没有,使用起来也非常正常。但是如果使用MTR对负责这条规则的链接做路由追踪的话,就会出现第一次路由追踪完毕后,从第二跳开始就会丢包。

解决Laravel获取获取配置不稳定的问题

(还在更新排版中...)
原因
在Apache开启worker或者event配合PHP Thread-safe版本的多线程情况下,环境变量由各个PHP线程共享。
在前一个线程初始化/退出清理环境的时候,会影响到其他线程读取环境变量,导致phpdotenv无法获取到正确的值(被初始化),从而导致Laravel获取不到设定的config,导致config初始化。

© 2025 Ovear's Blog All rights reserved.