# 赵健的博客 - 全文索引 > 最近 30 篇博客文章全文拼接,按发布时间倒序。 Site: https://www.zhaojian.net Author: 赵健 Generated: 2026-07-22T09:35:03.108Z --- ## Ghostty 终端 Fira Code 字体中文标点(问号? 叹号!)显示异常的解决方法 URL: https://www.zhaojian.net/ghostty-fira-code-chinese-punctuation-fix/ Date: 2026-06-04 Tags: Ghostty, Ghostty标点, Ghostty问号, Ghostty叹号, Fira Code, Fira Code标点, Fira Code叹号, Fira Code问号, 字体配置, 中文显示, 中文标点, 字体乱码, CJK 字体回退, font-family, PingFang, 苹方, 终端配置, 终端美化, macOS, 字体渲染 Categories: 技术 > Ghostty 终端使用 Fira Code 字体时,中文标点(问号? 叹号! 括号等)显示异常的原因与解决方法。Fira Code 不含中文字形会触发字体回退,通过 font-family 追加 PingFang 等 CJK 字体即可修复。 ### 问题原因 Fira Code 是纯编程字体,不包含中文字形。当终端要显示中文全角标点(`?!()`在 U+FF00–FFEF,`。`在 U+3000–303F)时,Ghostty 只能临时回退到系统 CJK 字体。在 macOS 上默认回退到苹方,而这个回退字体不随主字体缩放、还可能出现基线偏移、同行粗细不一致等问题——这是 Ghostty 在 macOS 上已知的字体回退行为,所以标点看起来又大又怪。 ![Ghostty 终端 Fira Code 字体中文标点(问号? 叹号!)显示异常的解决方法](/uploads/2026/06/ghostty-fira-code-chinese-punctuation-fix01.png) ### 最终解决方案 通过 `Ghostty > Settings...` 或快捷键 `⌘ + ,` 打开 Ghostty 配置文件,在 Fira Code 之后追加一行 `font-family`,把苹方设为整体回退字体。 ``` font-family = Fira Code font-family = PingFang SC ``` ![Ghostty 终端 Fira Code 字体中文标点(问号? 叹号!)显示异常的解决方法](/uploads/2026/06/ghostty-fira-code-chinese-punctuation-fix02.png) `font-family` 可以写多行,第一行是主字体,后续作为回退;凡是 Fira Code 没有的字形(中文标点、汉字、全角字符)都会统一交给 PingFang,渲染一致。 通过 `Ghostty > Reload Configuration` 或快捷键 `⇧ + ⌘ + ,` 应用设置并重新加载配置生效。 ![Ghostty 终端 Fira Code 字体中文标点(问号? 叹号!)显示异常的解决方法](/uploads/2026/06/ghostty-fira-code-chinese-punctuation-fix03.png) 配置文件路径一般在 `~/.config/ghostty/config`(macOS 上也可能是 `~/Library/Application Support/com.mitchellh.ghostty/config`)。 --- ## 使用 SlimBrave Neo 关闭 Brave 浏览器的 Leo AI、奖励、钱包等功能,免费实现 Brave Origin 效果 URL: https://www.zhaojian.net/debloat-brave-browser-with-slimbrave-neo/ Date: 2026-05-14 Tags: Brave Origin, Brave, Brave 浏览器, Brave 精简版, Brave Origin 破解版, Brave Origin 免费版, Brave 关闭 Leo, Brave 关闭 AI, Brave 关闭 Rewards, Brave 关闭 Web3, Brave 关闭 钱包, Brave 关闭 VPN, Brave 关闭 Tor, Brave 关闭 News, Brave 删除臃肿功能, Brave 精简方案 Categories: 技术 > 使用 SlimBrave Neo 通过 Chromium 企业级托管策略一键关闭 Brave 浏览器的 Rewards、Wallet、VPN、Leo AI Chat、Tor、News 等内置功能,无需破解、无需扩展,在 macOS / Linux / Windows 上实现接近 Brave Origin 的精简效果。 Brave 是一款非常优秀的浏览器,尤其是它的广告拦截功能,各种视频广告都能直接屏蔽,而且内存占用很低。但它也内置了一些平时基本用不到的功能,例如 Leo(AI 助手)、Rewards、Wallet(Web3)、VPN、Tor、News、Talk 等。 之前我只是在设置里把能关的功能都关掉,使用过程中尽量不去触发那些不相关的功能。 最近发现了 Brave Origin,它相当于 Brave 官方推出的精简版,可以关闭这些支撑 Brave 商业运营的功能,同时不影响隐私保护、广告拦截等核心常用功能。但只有 Linux 用户可以免费使用,其他系统需要付费开通。我最近没怎么用 Linux,就想深入研究一下,一开始想找有没有 Brave Origin 的破解版或破解方案,后来发现了 [SlimBrave Neo](https://github.com/ChaoticSi1ence/SlimBrave-Neo) ——它利用 Chromium 企业级托管策略来禁用 Brave 浏览器中的遥测、臃肿功能和不需要的特性。无需浏览器扩展,也不依赖任何 hack/crack 手段,只是纯粹地使用 Brave 原生支持的策略机制,就能实现和 Brave Origin 官方付费方案类似的效果。 ## 安装与使用 方法非常简单,以 macOS 为例: ``` git clone https://github.com/ChaoticSi1ence/SlimBrave-Neo.git cd SlimBrave-Neo sudo python3 slimbrave-mac.py ``` ![SlimBrave Neo macOS 终端 TUI 截图,展示禁用 Brave Rewards、Wallet、VPN、AI Chat 等功能的复选项](/uploads/2026/05/slimbrave-neo.png) 详细了解请访问 SlimBrave Neo GitHub 项目: [https://github.com/ChaoticSi1ence/SlimBrave-Neo](https://github.com/ChaoticSi1ence/SlimBrave-Neo) ## SlimBrave Neo 可关闭的功能列表 ### 遥测与上报 * 禁用指标上报 * 禁用 Safe Browsing 上报 * 禁用 URL 数据收集 * 禁用 P3A 分析 * 禁用 Stats Ping ### 隐私与安全 * 禁用 Safe Browsing * 禁用自动填充(地址与信用卡) * 禁用密码管理器 * 禁用浏览器登录 * 启用 Do Not Track * 启用全局隐私控制(GPC) * 启用 De-AMP(剥离 Google AMP 包装) * 启用 Debouncing(跳过已知的追踪重定向) * 剥离 URL 追踪参数 * 减少语言指纹 * 禁用 WebRTC IP 泄露 * 禁用 QUIC 协议 * 阻止第三方 Cookie * 强制开启 Google 安全搜索 * 禁用 / 强制无痕模式(二选一) ### Brave 自有功能 * 禁用 Brave Rewards * 禁用 Brave Wallet * 禁用 Brave VPN * 禁用 Brave AI Chat * 禁用 Brave Shields * 禁用 Brave News * 禁用 Brave Talk * 禁用 Brave Playlist * 禁用 Web Discovery * 禁用 Speedreader * 禁用 Tor * 禁用 Sync * 禁用 IPFS ### 性能与冗余功能 * 禁用后台运行 * 禁用购物清单 * PDF 始终用外部程序打开 * 禁用翻译 * 禁用拼写检查 * 禁用搜索建议 * 禁用打印 * 禁用「设为默认浏览器」提示 * 禁用开发者工具 * 禁用 Wayback Machine ### DNS over HTTPS * 四种模式:`automatic`、`off`、`secure`、`custom` * 支持自定义 DoH 模板 URL(例如 `https://cloudflare-dns.com/dns-query`) * TUI 内可直接编辑模板字段 --- ## 微信公众号模板消息 notes 字段不显示问题排查与解决 URL: https://www.zhaojian.net/wechat-official-account-template-message-notes-field-not-showing/ Date: 2026-05-05 Tags: 微信公众号, 微信公众号模板消息, 模板消息, 模板消息 notes, 模板消息 remark, 模板消息备注, 模板消息字段不显示, 模板消息 notes 不显示, 模板消息 remark 不显示, 模板消息保留字段, 微信模板消息踩坑, 微信模板消息开发, 微信测试号, 公众号开发, WeChat template message, WeChat notes field Categories: 技术 ## 问题描述 在使用微信公众号测试号发送模板消息时,遇到一个奇怪的问题:模板中定义了6个字段,但 `notes`(备注)字段始终不显示,其他5个字段都能正常显示。 模板内容如下: ``` 姓名:{{name.DATA}} 电话:{{phone.DATA}} 时间:{{time.DATA}} 项目:{{services.DATA}} 员工:{{staff.DATA}} 备注:{{notes.DATA}} ``` API 调用返回成功,但微信消息中只显示前5行,备注始终不出现。 ## 排查过程 ### 1. 排除字段数量限制 最初怀疑是微信测试号有字段数量限制(最多5个字段)。通过测试发现: - 去掉"员工"字段,只发5个字段 → 备注仍然不显示 - 添加更多字段到9个 → 所有字段包括备注都显示了 结论:不是字段数量限制。 ### 2. 排除字符长度限制 根据微信官方文档,模板消息每行内容不超过20字符,总内容不超过200字符。测试数据远未超过限制。 结论:不是字符长度问题。 ### 3. 发现关键规律 通过反复测试发现一个规律: | 模板字段数 | notes 位置 | notes 是否显示 | |-----------|-----------|---------------| | 6个字段 | 最后一个 | 不显示 | | 9个字段 | 第6个(非最后) | 显示 | | 7个字段 | 第6个(非最后) | 显示 | 当 `notes` 是模板的最后一个字段时,它不会显示。 ### 4. 验证 notes 字段名问题 将 `notes` 替换为其他字段名测试: | 字段名 | 是否显示 | |-------|---------| | notes | 不显示 | | remark | 不显示 | | info | 显示 | | message | 显示 | `notes` 和 `remark` 都不显示,而 `info`、`message` 可以正常显示。 ## 原因分析 微信公众号模板消息 API 原本支持一个 `remark` 参数,用于在消息底部显示备注信息。但从 **2023年3月30日** 起,微信官方发布公告: > 模板消息不再展示备注(remark)字段 微信对 `notes`、`remark` 等字段名进行了特殊处理,将其识别为"备注"类字段,因此不予显示。这是微信的保留字段名限制。 ## 解决方案 ### 方案一:更换字段名(推荐) 将 `notes` 改为其他名称,如 `message`、`info`、`desc` 等: ``` 姓名:{{name.DATA}} 电话:{{phone.DATA}} 时间:{{time.DATA}} 项目:{{services.DATA}} 员工:{{staff.DATA}} 留言:{{message.DATA}} ``` ### 方案二:在 notes 后添加占位字段 在 `notes` 后面添加一个占位字段,使其不再是最后一个字段: ``` 姓名:{{name.DATA}} 电话:{{phone.DATA}} 时间:{{time.DATA}} 项目:{{services.DATA}} 员工:{{staff.DATA}} 备注:{{notes.DATA}} 其他:{{other.DATA}} ``` 发送时 `other` 字段可以不传值或传空值。 ## 代码修改 后端发送通知数据时,将字段名从 `notes` 改为 `message`: ```javascript // 注意:不能使用 notes 作为字段名,微信会将其识别为保留的"备注"字段而不显示 return { name, phone, time: timeRange, services, staff, message // 原来是 notes }; ``` ## 总结 1. 微信公众号模板消息有保留字段名限制,`notes`、`remark` 等会被识别为"备注"字段而不显示 2. 这是 2023 年微信政策调整的结果,模板消息不再展示备注内容 3. 解决方案是避免使用这些保留字段名,改用 `message`、`info` 等普通名称 4. 排查此类问题时,可以通过添加/删除字段、更换字段名等方式逐步定位 ## 参考资料 - [微信公众平台模板消息接口文档](https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html) - [模板消息字数限制说明](https://kejiweixun.com/note/202303241915) --- ## Anthropic Claude 身份验证方法 Quick identity check Identity verification on Claude URL: https://www.zhaojian.net/quick-identity-check-identity-verification-on-claude/ Date: 2026-04-23 Tags: Anthropic, Claude, 身份验证, 身份验证方法, Quick identity check, Identity, verification, Claude Code, kyc, Claude Code 验证, Claude Code 验证方法, Claude 验证, Claude 验证方法, Claude Code 身份验证, Claude Code 身份验证方法, Claude 身份验证, Claude 身份验证方法 Categories: 技术 最近听说 Anthropic 在 Claude 推出了身份验证,没想到今天就遇到了。 ![Anthropic Claude 身份验证方法 Quick identity check Identity verification on Claude](/uploads/2026/04/identity-verification-on-claude0.png) 弹出提示后,需要准备一个有效的政府颁发的带照片的身份证件,点击 Start 后,首先会让你选择身份证件颁发的国家或地区,选择国家或地区后,会弹出一个二维码,使用手机扫码二维码,然后进行拍照上传证件照片,再进行人脸识别。 很快,几秒钟就通过了。(之前使用 LinkedIn 的时候,也是同样的认证,审核竟然等了 3 天) ![Anthropic Claude 身份验证方法 Quick identity check Identity verification on Claude](/uploads/2026/04/identity-verification-on-claude1.png) 我使用的是其他国家颁发的国际驾照,据说中国的证件会导致账号直接被封,所以没敢试。 不过,这种认证要求不高,想想办法还是可以通过的。😄😄😄 --- ## 日本手机号码靓号查询工具(乐天、docomo、au、SoftBank、ahamo、povo、UQ、Y!mobile等) URL: https://www.zhaojian.net/rakuten-mobile-japan-premium-phone-number-lookup/ Date: 2026-02-10 Tags: 日本手机靓号, 日本手机号怎么选, 日本选手机号, 日本手机号, 日本吉祥号, 日本幸运号, 日本手机号 吉利号码, 日本手机号 不要4和9, 日本手机号 豹子号, 日本手机号 顺子号, 乐天手机号码, 乐天SIM卡, 乐天SIM号码, 乐天选号, 乐天靓号, 乐天手机号码查询, 乐天携号转网, docomo选号, au选号, SoftBank选号, ahamo选号, povo选号, UQ mobile选号, Y!mobile选号, linemo选号, mineo选号, IIJmio选号, docomo靓号, au靓号, SoftBank靓号, ahamo靓号, povo靓号, UQ mobile靓号, Y!mobile靓号, linemo靓号, mineo靓号, IIJmio靓号, 日本携号转网, MNP转网, 格安SIM, 格安SIM选号 Categories: 技术 日本的大部分运营商在办理手机号码时,都是系统随机选号,全凭运气,想要选择一个自己喜欢的号码很难。 不过乐天移动是可以自己选号的,在官网申请的时候可以通过付费进行号码选择,但选择的时候很不方便,能查看的号码又太少。手动一个一个试效率太低,而且经常网络中断。于是我写了一个工具,可以自定义查询靓号。 ![日本手机号码靓号查询工具(乐天、docomo、au、SoftBank、ahamo、povo、UQ、Y!mobile等)](/uploads/2026/02/rakuten-mobile-japan-premium-phone-number-lookup.png) **支持的靓号类型我分了四档:** **S 极品** — 可遇不可求的级别 - AAAA 豹子号(8888、6666 这种) - 4 位顺子号(5678、8765 这种) **A 稀有** — 遇到就别犹豫 - AAAAX(88889)、XAAAA(18888),接近豹子的存在 - AAA 三豹子(尾号 888、666) **B 经典** — 好记又规律 - AAAB 三同号(8886)、AABB 双对号(8866) - ABAB 交替号(8686)、ABBA 回文号(8668) **C 入门** — 日常够用 - 3 位顺子(678、876) - 吉利号(1688、1888、5188 这些组合) 一共 11 种规则,基本涵盖了市面上所有靓号类型。 ### 几个比较实用的功能 **数字排除**:日语里 4 读 "shi"(死),9 读 "ku"(苦),很多人忌讳这两个数字。工具里 0-9 每个数字都可以单独排除,勾上之后结果里就不会出现带这个数字的号码。 **自定义尾号**:不想用预设规则的话,也可以直接输入你想要的尾号,比如生日 0226、纪念日 1225 之类的。 **超级高亮**:如果选了 AAAAX 规则(4 位相同+1 位不同),因为乐天只支持查 4 位,但如果返回的号码刚好前一位也是同一个数字,那其实就是 AAAAA 五连了。工具会自动检测这种情况,给一个红色的 SUPER 标记。 **筛选和搜索**:号码刷多了之后,结果列表会很长。顶部有按类型分类的统计标签,点一下就能只看某一类;也有搜索框可以直接搜号码里的关键数字。 ### 查到号码之后怎么办 工具本身只能进行查询,查到心仪的号码后,你需要自己去乐天移动官网下单办理。流程就是正常的乐天开户流程,选号码那一步把查到的号码输进去就行。需要注意,自定义号码乐天官方收费1100日元,我认为如果是自己喜欢的号码,还是值得的。 ### 非乐天移动其他运营商怎么办? 如果不想选择乐天移动,后续考虑使用docomo、au、SoftBank、ahamo、povo、UQ、Y!mobile等运营商的,可以利用日本的 MNP 携号转网了。 参考流程:**先在乐天移动选择靓号 → 用一段时间 → MNP 转到 docomo / au / SoftBank / ahamo / povo / UQ / Y!mobile或者任何你喜欢的格安 SIM卡运营商**。 我就是这么干的,哈哈。 ### 为什么不公开这个工具 因为不确定这种工具是否符合乐天的服务条款。虽然只是查询,没有任何修改操作,但毕竟是非常规手段,保险起见,我暂时不准备开源发布。 如果哪天确认了没有合规问题,我会第一时间公开代码仓库。 ### 如何使用这个工具 如果你有查号需求,可以留言或者发邮件告诉我: 1. **你想要什么样的号码** — 比如"尾号 8888"、"想要顺子"、"带 168 的"、"不要 4 和 9",越具体越好 2. **你的邮箱地址** 收到邮件之后会尽快帮你查询号码,并把结果整理好发给你。我已经做出了全自动操作,输入完号码规则和邮箱,可以实现自动发信。 --- ## 免费体验Claude Code 分享3个Guest Pass(访客通行证)免费Claude Pro Max会员账号 URL: https://www.zhaojian.net/free-claude-code-guest-pass-passes-share/ Date: 2026-02-07 Tags: Claude, Claude Pro, Claude Max, Claude Guest Pass, Claude Pro 免费体验, Claude Max 免费体验, Claude Pro 会员账号, Claude Max 会员账号, Claude Code, Claude 访客通行证, Claude 邀请码, Anthropic Claude, Claude Pro 试用, Claude Max 试用, Claude Code 终端编程, AI 编程助手, Claude 免费试用7天, Claude Code 怎么用, AI 结对编程, Claude 邀请链接, Claude passes, AI 工具推荐, AI 编程工具, 开发者工具, LLM 体验, GPT 替代 Categories: 技术 最近使用Claude Code的时候,终端一直提示“/passes Share a free week of Claude Code with friends and earn extra usage”,搜索了一下,这是 Anthropic 推出的免费体验功能 ——**Guest Pass(访客通行证)**,允许 Max 订阅用户把 Claude Pro 的体验资格分享给朋友。我这几个账号内都有,分享几个,先到先得,送完为止。 ## Guest Pass 是什么? 点击我的邀请链接后,就能获得 **7 天完整的 Claude Pro 体验**,包括: - **Claude 全系列模型访问**:Opus、Sonnet、Haiku 随便用 - **Claude Code**:Anthropic 官方的命令行 AI 编程助手,直接在终端里和 AI 结对编程 - **更高的使用额度**:相比免费版有大幅提升 - **所有 Pro 功能**:Deep Research、文件创建、网页搜索等 ## 如何领取? 1. 点击我分享的邀请链接(见图片) 2. 注册或登录 Claude 账号 3. 开始免费使用 7 天 Claude Pro ![免费体验Claude Code 分享3个Guest Pass(访客通行证)免费Claude Pro Max会员账号](/uploads/2026/02/free-claude-code-guest-pass-passes-share.png) **链接:** `https://claude.ai/referral/uiL9c_Xwrj` **注意事项:** - 领取时需要绑定信用卡,但试用期内不收费 - 7 天后如果不想继续,记得在到期前取消订阅,否则会自动按 $20/月扣费 - 每个邀请链接只能被新用户使用一次 - 名额有限,领完即止 *如果你领取后觉得好用,也欢迎分享给身边的朋友。如果你也是 Max 用户,可以在 Claude Code 里输入 `/passes` 命令来生成自己的分享链接。* --- ## 缩小 macOS 菜单栏各个图标之间的间距 URL: https://www.zhaojian.net/reduce-the-spacing-between-icons-in-the-macos-menu-bar/ Date: 2026-01-28 Tags: MacOS, Mac, Macbook Pro, Macbook, MacOS菜单栏, Mac菜单栏, Macbook Pro菜单栏, Macbook菜单栏, MacOS菜单栏图标, Mac菜单栏图标, Macbook Pro菜单栏图标, Macbook菜单栏图标, MacOS菜单栏间距, Mac菜单栏间距, Macbook Pro菜单栏间距, Macbook菜单栏间距, MacOS图标间距, Mac图标间距, Macbook Pro图标间距, Macbook图标间距, MacOS缩小图标间距, Mac缩小图标间距, Macbook Pro缩小图标间距, Macbook缩小图标间距 Categories: 技术 在 macOS Tahoe 版本 26.2 中,无需安装第三方工具,缩小 macOS 菜单栏各个图标之间的间距 ##### 缩小 ```shell defaults -currentHost write -globalDomain NSStatusItemSelectionPadding -int 7 defaults -currentHost write -globalDomain NSStatusItemSpacing -int 7 ``` 退出登录或重启生效。 ##### 恢复 ```shell defaults -currentHost delete -globalDomain NSStatusItemSelectionPadding defaults -currentHost delete -globalDomain NSStatusItemSpacing ``` --- ## UFW 防火墙导致 KDE Connect 不能发现对方 URL: https://www.zhaojian.net/ufw-firewall-prevents-kde-connect-from-discovering-the-other-device/ Date: 2026-01-01 Tags: UFW 防火墙, UFW, KDE Connect, KDE Connect 不能发现对方, KDE Connect 无法连接, KDE Connect 无法检测, KDE Connect 无法工作, KDE Connect 无法使用, KDE Connect 找不到设备 Categories: 技术 之前遇到过 KDE Connect 无使用问题,具体表现为KDE Connect 无法检测网络上的任何设备,无法工作,无法使用。 详细请参考: [Debian/Kali Linux KDE Connect 无法检测网络上的任何设备 无法工作](https://www.zhaojian.net/kde-connect-does-not-detect-any-devices-on-network-does-not-work/) 最近在 CachyOS 下,也遇到了 KDE Connect 无法检测网络上的任何设备的情况,这个跟之前不一样,是因为UFW 防火墙导致的。 解决办法: ``` bash sudo ufw allow 1714:1764/udp sudo ufw allow 1714:1764/tcp sudo ufw reload ``` --- ## 消除MacOS屏幕顶部闪现的白线 URL: https://www.zhaojian.net/remove-the-white-line-at-the-top-of-the-macos-screen/ Date: 2025-12-23 Tags: MacOS, Mac, Macbook Pro, Macbook, MacOS白线, Mac白线, Macbook Pro白线, Macbook白线, MacOS屏幕白线, Mac屏幕白线, Macbook Pro屏幕白线, Macbook屏幕白线, MacOS白线闪现, Mac白线闪现, Macbook Pro白线闪现, Macbook白线闪现 Categories: 技术 这几天发现MacOS下的屏幕顶端总有一条白线闪现,网上搜不到解决方案。我的情况是,屏幕顶端右侧,在拖动某个窗口时,就会有一条白线闪现。 找到了这个文章,情况差不多,但没有解决。 [macOS 26.2 graphical bug: thin white line at top of screen](https://www.reddit.com/r/MacOS/comments/1plcp9x/macos_262_graphical_bug_thin_white_line_at_top_of/) 大多数解决方案都是: ![MacOS 屏幕顶部白线消除方法](/uploads/2025/12/2025-12-23a.png) 目前通过【系统设置】>【菜单栏】,开启【显示菜单栏背景】,的确没有白线闪现了,但我不想显示菜单栏背景啊😂 之前在Windows下,遇到过一次类似的阴影情况,后来发现是外接显示器窗口最大化后端阴影,我这次还是把重点放在桌面与外接显示器上逐一排查。 最后,通过取消虚拟桌面彻底解决了此问题。 方法: ![MacOS 屏幕顶部白线消除方法](/uploads/2025/12/2025-12-23b.png) 三个手指在触摸板上滑,出现虚拟桌面选项,长按鼠标左键,等其他桌面出现"x"的时候,点击删除其他的虚拟桌面,只保留一个。 我是上面有一个外接显示器的虚拟桌面,删掉就好了。 --- ## CachyOS全局字体设置,解决部分程序字体太丑不统一 URL: https://www.zhaojian.net/cachyos-global-font-settings-fixing-fonts/ Date: 2025-12-15 Tags: CachyOS, arch, linux, 字体, 全局字体, linux字体, linux全局字体, cachyos字体, cachyos全局字体 Categories: 技术 CachyOS 已经连续12个月 在 DistroWatch 排名第一了,之前就听说过这个系统很快,但只安装过,没有深度体验。因为刚刚装完系统的字体太丑,直接就放弃了。最近有空又装了一次,速度是真快,日常操作能真实感受出来。但设置过字体后,还是会出现部分程序字体不统一,太丑了。通过下面方法尝试修改用户字体配置文件后,终于统一了。 修改 fontconfig 配置,编辑用户字体配置文件 ``` nano ~/.config/fontconfig/fonts.conf ``` 使用下面内容替换原有配置文件内容 ``` roman roman matrix 1 0.2 0 1 oblique false medium bold true bold sans-serif Noto Sans CJK SC serif Noto Serif CJK SC monospace Noto Sans Mono CJK SC ``` 刷新字体缓存 ``` fc-cache -fv ``` --- ## CachyOS使用多个显示器无法开机,一直黑屏等待卡死在Plymouth界面无法登录 URL: https://www.zhaojian.net/cachyos-fails-to-boot-when-using-multiple-monitors-failed-to-start-terminate-plymouth-boot-screen/ Date: 2025-11-25 Tags: CachyOS, arch, linux, Plymouth, 无法登录, 黑屏, 开机一直等待, 开机黑屏, cachyos无法登录, cachyos黑屏, cachyos开机一直等待, cachyos开机黑屏 Categories: 技术 CachyOS使用多个显示器无法开机,一直黑屏等待,卡死在Plymouth界面,只显示转圈图标,无法登录。折腾了很久,最终在跳转Plymouth界面之前,按 esc 发现了系统启动日志: ``` [FAILED] Failed to start Terminate Plymouth Boot screen. See 'systemctl status plymouth-guit.service' for details. ``` ``` [* ] A start job is running for Hold until boot process finishes up (1min 34s / no limit) ``` Plymouth就是CachyOS开机显示logo的程序,就是因为它导致的,这个问题在社区内已经存在很久了,方法参考:[[Tutorial] Disable or Remove Plymouth (boot splash)](https://discuss.cachyos.org/t/tutorial-disable-or-remove-plymouth-boot-splash/10922) 修改 systemd-boot 启动配置文件: ``` sudo nano /etc/sdboot-manage.conf ``` 找到下面 LINUX_OPTIONS 这行: ``` # Kernel options to be appended to the "options" line LINUX_OPTIONS="zswap.enabled=0 nowatchdog splash" ``` 把: ``` splash ``` 替换为: ``` plymouth.enable=0 disablehooks=plymouth ``` 更新并应用配置文件 ``` sudo sdboot-manage gen ``` 现在关闭了开启过程中的logo特效,虽然少了点什么,但开机速度也更快了,值得。 --- ## 解决抖音 系统繁忙,请重启应用或刷新页面后重试 方法 URL: https://www.zhaojian.net/douyin-tiktok-system-out-of-order-please-restart-the-app-or-refresh-the-page-and-try-again/ Date: 2025-10-08 Tags: 抖音, 系统繁忙, 重启应用, 刷新页面, 重试, tiktok, 抖音系统繁忙, 抖音无法登陆, tiktok系统繁忙, tiktok无法登陆 Categories: 技术 平时几乎不用抖音,手机里也没安装,前段时间有人用我的号码进行抖音退货,想看看是不是被盗了。 安装好抖音app后,竟然无法登陆,提示“系统繁忙,请重启应用或刷新页面后重试”。等了几天,还是同样的提示。反复卸载重装,仍然提示:“系统繁忙,请重启应用或刷新页面后重试”。 ![解决抖音 系统繁忙,请重启应用或刷新页面后重试 方法](/uploads/2025/10/douyin251008a.jpg) 全网寻找解决方案,除了等待,没有一个靠谱的解决方法。 今天突然想起,是不是要返回墙内网络呢?但穿越的时候提示:“此网络无法访问互联网”“无法访问私人DNS服务器”。 ![解决抖音 系统繁忙,请重启应用或刷新页面后重试 方法](/uploads/2025/10/douyin251008c.jpg) 关闭手机里设置的专用DNS后,可以正常登陆了。因为之前网络一直没问题,那判断问题肯定就是专用DNS了。重试了一次,果然是专用DNS设置的问题。 取消专用DNS即可(把专用DNS设置为自动或关闭)。 ![解决抖音 系统繁忙,请重启应用或刷新页面后重试 方法](/uploads/2025/10/douyin251008b.jpg) 我手机里的专用DNS是为了去广告的,所以如果你开启了去广告插件、路由里设置了广告拦截、使用了国内无法解析的DNS,这些原因都有可能造成抖音出现“系统繁忙,请重启应用或刷新页面后重试”。 --- ## 新版QQ邮箱VIP会员广告屏蔽过滤规则 URL: https://www.zhaojian.net/new-qq-mail-vip-adblock-rules/ Date: 2025-09-23 Updated: 2025-12-25 Tags: 新版邮箱, 新版QQ邮箱, QQ邮箱, 新版邮箱广告屏蔽, 新版QQ邮箱广告屏蔽, QQ邮箱广告屏蔽, 新版邮箱广告过滤规则, 新版QQ邮箱广告过滤规则, QQ邮箱广告过滤规则, 新版邮箱VIP广告屏蔽, 新版QQ邮箱VIP广告屏蔽, QQ邮箱VIP广告屏蔽, 新版邮箱会员广告屏蔽, 新版QQ邮箱会员广告屏蔽, QQ邮箱会员广告屏蔽 Categories: 技术 QQ邮箱新版本发布有一段时间了,一开始文件夹无法排序,反馈了也没回应。 8月份的更新,终于可以排序文件夹了。但随之而来的,是铺天盖地、吃相难看的VIP会员广告,不知道运营团队是怎么想的,缺钱缺疯了吗?一个页面塞进去9个推荐广告,也只有QQ邮箱VIP会员能做到了!!! ![新版QQ邮箱VIP会员广告屏蔽过滤规则](/uploads/2025/09/qqmail.png) 于是,有了新版QQ邮箱VIP会员广告屏蔽过滤规则。只在Adblock Plus、Brave做了测试,其他的不知道是否正常。 **免责声明**:本广告过滤规则仅供我个人使用,用于系统更换时的备份。如果你看到了本规则,请马上闭上眼睛,不要参考借鉴。本人不对参考、引用、个人使用或商业用途引起的任何法律责任承担责任。 持续更新地址:[https://github.com/zhaojiannet/qq-mail-adblock](https://github.com/zhaojiannet/qq-mail-adblock) ``` [Adblock Plus] ! Title: QQ邮箱VIP广告屏蔽规则 ! Description: 屏蔽新版QQ邮箱中的VIP会员推广广告 ! Homepage: https://github.com/zhaojiannet/qq-mail-adblock ! Last modified: 2025-12-25 ! Version: 1.0.0 ! License: MIT ! ===================================== ! 头像左侧 ! ===================================== mail.qq.com##div.xmail-cmp-vip-float-bubble:has(.cmp-vip-float-bubble-body) mail.qq.com##div:has(span:has-text(开通 VIP 会员)):has(.cmp-vip-icon) mail.qq.com##div.cmp-vip-float-bubble-body:has-text(让邮箱更好用) ! ===================================== ! 头像弹出 ! ===================================== wx.mail.qq.com##.xmail-cmp-vip-embed-bubble wx.mail.qq.com##div.xmail-ui-btn.ui-btn-size32.ui-btn-them-clear-gray.footer-btn:nth-of-type(1) wx.mail.qq.com##.vip-icon-click.vip-icon-in-panel.cmp-vip-state-icon.common-state-icon wx.mail.qq.com##.profile-user-info > .cmp-vip-state-icon.common-state-icon wx.mail.qq.com##.cmp-vip-icon-click.cmp-vip-icon-in-panel.cmp-vip-state-icon.cmp-common-state-icon ! ===================================== ! 应用容量 ! ===================================== wx.mail.qq.com##div.setting-group:nth-of-type(1) wx.mail.qq.com##.content-time ! ===================================== ! 设置-顶部 ! ===================================== wx.mail.qq.com##.xmail-cmp-vip-banner-common ! ===================================== ! 设置-容量 ! ===================================== wx.mail.qq.com##.mail-setting-storage > div.setting-item-wrap:nth-of-type(2) > div.setting-item-row:nth-of-type(2) ! ===================================== ! 设置-显示主题 ! ===================================== wx.mail.qq.com##.setting-item-wrap.mail-setting-themes > div.setting-item-row:nth-of-type(1) wx.mail.qq.com##.setting-item-wrap.mail-setting-themes > div.setting-item-row:nth-of-type(2) > .setting-theme-cards wx.mail.qq.com##.setting-item-wrap.mail-setting-themes > div.setting-item-row:nth-of-type(3) ! ===================================== ! 设置-发信 ! ===================================== wx.mail.qq.com##.inactive-account-table ! ===================================== ! 设置-自助查询 ! ===================================== wx.mail.qq.com##.xmail-ui-hyperlink.query-head-note wx.mail.qq.com##.xmail-ui-hyperlink.ui-hyperlink-is-inline.tab-title-vip-link ! ===================================== ! 设置-全局 ! ===================================== wx.mail.qq.com##.cmp-streamer-right ``` 阻止弹出层自动消失代码,控制台执行 ``` setTimeout(() => { // 保存原始的 addEventListener const originalAddEventListener = EventTarget.prototype.addEventListener; // 拦截所有新添加的 click 事件 EventTarget.prototype.addEventListener = function(type, listener, options) { if (type === 'click') { console.log('拦截了 click 事件'); return; // 不添加这个事件 } return originalAddEventListener.call(this, type, listener, options); }; // 移除页面上所有已存在的 click 事件 document.querySelectorAll('*').forEach(el => { const clone = el.cloneNode(true); if (el.parentNode) { el.parentNode.replaceChild(clone, el); } }); console.log('✓ 已禁用所有点击关闭功能'); }, 3000); ``` --- ## Debian Linux虚拟机(virt-manager+QEMU+KVM)实现拖拽文件 共享文件 共享剪切板 复制粘贴 URL: https://www.zhaojian.net/debian-linux-qemu-kvm-libvirt-virt-manager-drop-files-share-files-share-clipboard/ Date: 2025-08-29 Tags: debian, ubuntu, linux, qemu, libvirt, virt-manager, debian安装qemu, debian安装libvirt, debian安装virt-manager, debian虚拟机拖拽文件, debian虚拟机共享文件, debian虚拟机共享剪切板, debian虚拟机复制粘贴, linux虚拟机拖拽文件, linux虚拟机共享文件, linux虚拟机共享剪切板, linux虚拟机复制粘贴 Categories: 技术 最近在用Debian,关于虚拟机安装,可参考之前的,差不太多 [EndeavourOS、Manjaro等Arch系Linux安装QEMU+KVM、libvirt、Virt-Manager虚拟机](https://www.zhaojian.net/arch-endeavouros-manjaro-linux-qemu-kvm-libvirt-virt-manager/) 虚拟机内的Windows安装成功后,想实现拖拽文件,共享剪切板、复制粘贴,但拖拽文件暂时只实现了宿主机到虚拟机的单向拖拽文件传输且只能拖到虚拟机桌面。没办法,只能在加一个 共享文件目录,把虚拟机的文件传输到宿主机。后面我使用了一段时间,发现这个共享文件的目录还算方便,后续操作也不再拖拽了,直接在共享文件目录内操作。 ##### VirtIO 主要用于实现共享剪切板、复制粘贴、拖拽文件 VirtIO的安装方法可参考 Proxmox VE 关于 [Windows VirtIO Drivers](https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers) 的文档, ![Proxmox VE Windows VirtIO Drivers](/uploads/2025/08/Screenshot_20250829_120426.png) 如果虚拟机有网络,可以根据系统不同直接下载 [virtio-win-gt-x64.msi](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.271-1/virtio-win-gt-x64.msi) 或 [virtio-win-gt-x86.msi](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.271-1/virtio-win-gt-x86.msi),再安装 [virtio-win-guest-tools.exe](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.271-1/virtio-win-guest-tools.exe)。如果虚拟机内没有网络,就下载 [virtio-win.iso](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso) ,给虚拟机指定光驱安装。 安装完毕后,需在 virt-manager (Linux宿主机端)进行设置,即可实现共享剪切板、复制粘贴、拖拽文件。 点击左下角添加硬件 ![virt-manager 添加硬件](/uploads/2025/08/Screenshot_20250829_114149.png) 选择通道,名称右侧下拉框内选择 org.qemu.guest_agent.0 ![virt-manager 添加通道](/uploads/2025/08/Screenshot_20250829_114126.png) ##### WinFsp 主要用于实现共享文件目录 官方文档有安装说明,直接下载[ WinFsp 安装程序](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi),默认安装即可。 ![WinFsp 安装](/uploads/2025/08/Screenshot_20250829_121123.png) 安装完毕后,需在 virt-manager (Linux宿主机端)进行设置 点击内存,开启共享内存。 ![virt-manager 开启共享内存](/uploads/2025/08/Screenshot_20250829_114327.png) 然后,再次添加硬件,这次选择文件系统,选择一个宿主机内用作文件共享的目录,再给这个目录设置一个虚拟机内显示的名称。 ![virt-manager 设置文件系统](/uploads/2025/08/Screenshot_20250829_114406.png) 接下来进行 Windows虚拟机端的设置,通过 Win+R 组合键打开“运行”窗口,输入 services.msc 或 Win+S 组合键打开搜索框,输入“服务”打开服务窗口 ![Windows 服务设置](/uploads/2025/08/Screenshot_20250829_114549.png) 找到“VirtIO-FS Service”服务,双击进行,选择自动启动,并把服务启动。 ![VirtIO-FS Service](/uploads/2025/08/Screenshot_20250829_114746.png) 服务启动后,在“我的电脑”中就可以发现刚刚添加的共享目录。 ![virt-manager 共享文件](/uploads/2025/08/Screenshot_20250829_114800.png) 以上软件的安装,均默认选择,无需额外设置,全部下一步即可完成。 --- ## Linux KDE Plasma6 Wayland 鼠标手势软件 InputActions 替代 easystroke URL: https://www.zhaojian.net/linux-kde-plasma-wayland-mouse-gestures-inputactions/ Date: 2025-06-21 Tags: EndeavourOS, Manjaro, Arch 鼠标手势, Arch, Linux, Linux 鼠标手势, 2025 Linux 鼠标手势, KDE 鼠标手势, Wayland 鼠标手势, Linux 鼠标手势软件, 鼠标手势, 鼠标手势软件, InputActions, easystroke Categories: 技术 今天更新到 KDE Plasma 6.4.0,修复了很多细节问题。Linux 微信在 Wayland 下的缩放问题,已经不需要手动设置环境变量了。 借此机会测试了一些软件的兼容性,想到一直欠缺的鼠标手势工具 Easystroke,Easystroke不支持 Wayland,继续依赖 X11 也不是长久之计,于是又一次探索替代方案,最终找到了 [InputActions](https://github.com/taj-ny/InputActions) —— 截至 2025-06-21,我找到的唯一能在 KDE Plasma 6(Wayland)下顺滑使用的鼠标手势工具。 虽然它无法完美替代 Easystroke,但常用的操作如“关闭窗口”、“前进 / 后退”等功能都能通过手势映射快捷键来实现,满足日常使用。 ### 系统信息 ``` 操作系统: EndeavourOS KDE Plasma 版本: 6.4.0 KDE 程序框架版本: 6.15.0 Qt 版本: 6.9.1 内核版本: 6.15.2-zen1-1-zen (64 位) 图形平台: Wayland ``` ### 安装、使用 根据[项目文档](https://github.com/taj-ny/InputActions?tab=readme-ov-file#installation)进行安装,仅支持Plasma 6 Wayland环境,支持arch、debian、fedora等主流发行版 我这里是EndeavourOS属于arch系,按照arch的安装方法来,首先安装构建依赖 ##### 依赖 ```bash sudo pacman -S --needed base-devel git extra-cmake-modules qt6-tools kwin yaml-cpp libevdev ``` ##### 构建 ```bash git clone https://github.com/taj-ny/InputActions cd InputActions mkdir build cd build cmake ../ -DCMAKE_INSTALL_PREFIX=/usr make sudo make install ``` ##### 使用 1、打开“系统设置”>“窗口管理”>“桌面特效”,滚动条拉到最下面,勾选“Input Actions”。 ![Linux KDE Plasma6 Wayland 鼠标手势软件 InputActions](/uploads/2025/06/20250621_143007.png) ![Linux KDE Plasma6 Wayland 鼠标手势软件 InputActions](/uploads/2025/06/20250621_143156.png) 2、点击“Input Actions”右侧配置图标,弹出详细配置界面。点击①“Record stroke”按钮后,移动鼠标完成鼠标手势的轨迹录制(对,就是移动鼠标,不会显示轨迹,也不需要按左键或右键,坑我已经踩完了😂),完成录制后,点击③“copy”即可把②处录制的轨迹复制到剪切板中。 ![Linux KDE Plasma6 Wayland 鼠标手势软件 InputActions](/uploads/2025/06/20250621_143254.png) 3、结合自己录制的鼠标手势,创建配置文件。 ``` sudo nano /home/user/.config/kwingestures.yml # 注意:此处user为你的用户名 ``` ``` mouse: gestures: - type: stroke mouse_buttons: [ right ] conditions: - $window_class contains chrome # 指定鼠标手势仅在chrome窗口下生效 gestures: - strokes: [ 'AAkAMQBaLP9kVmQA' ] # [ ]方括号内替换为之前录制的鼠标轨迹信息 actions: - on: end input: - keyboard: [ LEFTCTRL+W ] # [ ]方括号内替换为鼠标手势对应的快捷键 - strokes: [ 'ZDEAYwAyZAA=' ] actions: - on: end input: - keyboard: [ LEFTALT+LEFT ] - strokes: [ 'AC8AAWQ0ZAA=' ] actions: - on: end input: - keyboard: [ LEFTALT+RIGHT ] ``` 保存后需注销或重启,才会生效,配置文件重写后,鼠标手势可能会罢工。 ### 参考 https://discuss.kde.org/t/available-until-the-end-of-2024-mouse-gestures-support-on-plasma-6-wayland https://github.com/InputActions/docs/blob/cf320a16a836e267191f8bd9ccbb36450b3b6eb2/configuration.md --- ## Linux系统下Dr.Web大蜘蛛拦截Docker服务网络无法连接 URL: https://www.zhaojian.net/linux-drweb-blocks-docker-service-network/ Date: 2025-06-11 Tags: EndeavourOS, Manjaro, Arch, Linux, Linux 系统, Linux 杀毒, Linux 杀毒软件, Linux Dr.Web, Linux 大蜘蛛, 大蜘蛛, Dr.Web, docker无法连接, docker, docker互通, docker网络 Categories: 技术 都说Linux系统不需要安装杀毒软件,但是我的的确确是用Dr.Web大蜘蛛查出过病毒,所以不管需不需要,还是装一个好。 Dr.Web Desktop Security Suite 是目前为止,我掌握并测试后发现,唯一一个能在Linux 桌面系统下运行的杀毒软件,并且通过测试key,可以免费升级。Linux版的测试key一直没更新,但可以用win或其他版本的测试key。前段时间,出现过授权限制,无法使用win版本的测试key,但现在又可以正常使用了。 最近测试多个docker服务互通时,发现docker服务间无法互通,网络无法连接,宿主机也不能连接docker服务。排查到崩溃也找不出原因,各种踩坑后,最终发现是Dr.Web大蜘蛛的SpIDer Gate模块拦截了docker-proxy。本来想着记下来,后来换系统就给忘了,今天又遇到同样的问题,还是记录一下吧。 PostgreSQL 的 docker服务连不上了 ![无法连接 docker PostgreSQL 服务](/uploads/2025/06/20250611_172310.png) 打开 Dr.Web Desktop Security Suite,选择“设置” ![Dr.Web Desktop Security Suite 设置](/uploads/2025/06/20250611_172201.png) 选择“Exclusions”下的“Applications” ![Dr.Web Desktop Security Suite SpIDer Gate 白名单](/uploads/2025/06/20250611_172134.png) 把docker-proxy添加到排除名单里 ![Dr.Web Desktop Security Suite SpIDer Gate 白名单](/uploads/2025/06/20250611_172122.png) 搞定,这回网络互通了。 ![docker PostgreSQL 网络连通](/uploads/2025/06/20250611_172238.png) --- ## 7天换证 中国驾照在日本东京鲛洲免许中心更换驾驶证记录 外国の運転免許証切り替え URL: https://www.zhaojian.net/7-days-replacement-of-drivers-license/ Date: 2025-02-26 Tags: 7天换证, 中国驾照, 免许中心, 免许切替, 鲛洲免许中心, 鲛洲免许切替, 中国驾照日本换证, 日本换证, 日本换驾照, 日本换驾驶证, 东京换证, 东京换驾照, 东京换驾驶证, 鲛洲换证, 鲛洲换驾照, 鲛洲换驾驶证, 日本换国际驾照, 东京换国际驾照, 鲛洲换国际驾照 Categories: 技术 ### 准备资料: #### 1、在留卡; #### 2、护照; 如果有旧护照,请全部带齐。主要是用来查看你取得驾照后在国内停留的时间是否满3 个月以上。 #### 3、驾驶证正副本; #### 4、驾驶人基本信息、机动车驾驶人安全行驶记录 驾驶人基本信息,我的是两页,分别包括驾驶人基本信息和考试成绩。在车管所说出国换驾照,问了去哪个国家,说日本就直接给开出来3页。 ![驾驶人基本信息](/uploads/2025/02/20250218140741.jpg) ![驾驶人基本信息 考试成绩](/uploads/2025/02/20250218140738.jpg) ![机动车驾驶人安全行驶记录](/uploads/2025/02/20250218140735.jpg) #### 5、日本自动车联盟(JAF)的驾照日文翻译文件; 请到日本自动车联盟(JAF)官网申请,4400日元。申请后到7-11打印即可,有中文版的申请教程。 官网 - 運転免許証翻訳文の発行サービス https://jafnavi.jp/honyaku/uketuke/index.php [申请教程 - 中文(简体)](https://jaf.or.jp/-/media/1/2590/2708/3096/how-to-use_chinese_simplified.pdf) ![日本自动车联盟(JAF)驾照日文翻译](/uploads/2025/02/20250218140730.jpg) ![日本自动车联盟(JAF)驾照日文翻译](/uploads/2025/02/20250218140726.jpg) #### 6、住民票; 单独一人的就行,需显示国籍、签证类型、签证时间等信息,无需显示个人番号。如果打错了,带个人番号,需要涂黑遮挡,保护隐私。要彩色的,正面无彩色,背面有彩色logo的也可以,主要用于确认是否是原件。 #### 7、出入境记录; 微信小程序搜索“移民局12367”,查询10年的出入境记录。保存后到便利店打印,50日元。要彩色的,正面有彩色logo的,主要用于确认是否是原件。 **参考方法:** 微信小程序搜索“移民局12367”,再点击“中国公民服务”,再点击“出入境记录查询”,再选择“十年”,再点击“查询”,再点击“文件预览”,再选择右上角“···”,然后“转发”到文件助手到电脑打印,或保存到手机。 ![国际移民管理局 出入境记录 申请方法](/uploads/2025/02/20250218162709.jpg) ![国际移民管理局 出入境记录 申请方法](/uploads/2025/02/20250218160528.jpg) ![国际移民管理局 出入境记录 查询结果](/uploads/2025/02/20250218155059.jpg) #### 8、照片(高 3 厘米、宽 2.4 厘米)1张。 浅蓝色背景、白色背景都可以,不是驾驶证上的照片,这个是申请表上的照片。自助拍照机涨价了,现在要1000日元6张。可以自己拍一张白色背景或PS稍处理一下去便利店打印,选择“運転免許証”,尺寸为1寸、高 3 厘米、宽 2.4 厘米,250日元。 ![日本驾驶证照片尺寸规格](/uploads/2025/02/20250218140753.jpg) ### 排队、申请、答辩、内容考试、预约技能考试 东京一共有3个考场可以预约,府中考场、鲛洲考场、江东考场,我去的鲛洲,地图上搜索“鮫洲運転免許試験場”或“Samezu Driver's License Testing and Issuing Center”。截止2025年02月10日,需要起早排队,到现场预约。 #### 1、排队 鲛洲考场现在需要早起排队预约,去晚了就约不上了,每天名额有限制。推荐5点之前到现场,晚了可能就没机会了,每天排队人数也不一样,凭运气,还是赶早不赶晚,因为最早的电车无法在5点赶到现场,前一天的末班车到现场时间在1点多又太早,选择了附近的网吧。大井町站附近的DICE网吧,提前下载APP注册会员,3小时1200日元。 ![日本网吧](/uploads/2025/02/20250218140547.jpg) 第一次上日本网吧,咱是为了排队,所以叮嘱一句,睡觉,别乱点。 ![日本网吧 太开放了](/uploads/2025/02/20250218140543.jpg) 3点30出发去鲛洲考场,不到4点到达,排第一个,因为日语不好,周边溜达一圈,看有人来了,开始排队,让了一位排在第二。陆续开始上人,5点多基本排满了。等工作人员7点30左右到场维持秩序,7点50左右工作人员带着进门,上3楼窗口排队,准备提交资料。 ![鲛洲免许中心 考场](/uploads/2025/02/20250218140539.jpg) ![鲛洲免许中心 排队](/uploads/2025/02/20250218140534.jpg) #### 2、窗口递交材料,申请、答辩 把准备好的资料交到窗口,有的会问几个问题,有的也不问,随机。 我被问的问题:什么时候取得的驾照,第一次入境日本的时间,期间在国内有多少年,一共考了几个科目,科目一考试的大概内容、分数,科目二考试的大概内容。确定没问题后,窗口收资料,给你个小票,继续等待核查真伪。 ![鲛洲免许申请书](/uploads/2025/02/20250218140528.jpg) #### 3、交费、检查视力、内容考试 再次叫号后,到之前的窗口,会给你资料,然后去交费,2550日元,交费后去1楼检查视力,视力合格后,再回3楼之前提交资料的窗口后边,等待内容考试。需要注意的是,日本测视力不是国内的看字母“E”,而是看字母“C”,指出“C”的开口方向即可。内容考试的内容类似国内科目一的交通规则,很简单,但还是推荐看一看。 ![日本更换驾驶证 内容考试练习题](/uploads/2025/02/20250218140803.jpg) ![日本更换驾照 内容考试练习题](/uploads/2025/02/20250218140806.jpg) #### 4、预约技能考试 内容考试通过后,去2楼最里面的窗口,递交材料后,会给你一张卡,拿这个卡在窗口的机器上,选时间预约技能考试。完成后拿到受验票,等预约时间再来窗口对面的等待室进行技能考试。 ![鲛洲免许中心 更换驾照 技能考试 受验票](/uploads/2025/02/20250218140431.jpg) ![外国驾照换取日本驾照注意事项](/uploads/2025/02/20250218140445.jpg) ![外国驾照换取日本驾照 技能考试 注意事项](/uploads/2025/02/20250218140453.jpg) ![外国驾照换取日本驾照 技能考试 注意事项](/uploads/2025/02/20250218140448.jpg) ![鲛洲免许中心 技能考试 路线](/uploads/2025/02/20250218140441.jpg) ### 技能考试 技能考试当天,提前到受验票指定的(一般在2楼最里面)等待室等待技能考试,进屋后暂时随意坐就可以,等时间到了,会有考官进来,念名字,把资料交给考官,考官会核对信息问你换没换地址之类的,然后重新排车排号,看大屏幕,等待分配考试线路。网考试的时间段,只有C路线和H路线。 #### 1、排车、排号 重新排号的顺序为:N车N番,几号车就是考试使用的几号车,几番就是这个车第几个考试的人。第1番的人会直接被考官叫走,直接进行考试。后面的人看大屏幕就可以,叫到你了,不慌不忙出门右转上二楼,找到你的车。 #### 2、开始技能考试 上二楼找到自己的车,在副驾驶位把资料交给考官,把随身物品放在考官后的座椅上。 **车辆检查:** 车前方蹲下检查底盘,副驾驶一侧绕到车后方蹲下检查底盘,左右看来车走到驾驶位,左右看来车开门,车门关一半留个小缝,看后方看看别夹安全带,关门。 **发车准备:** 关车门后,调整座椅,双手调整中后视镜,系安全带,脚踩刹车,启动后调整左右倒车镜,挂D挡,松手刹,跟考官说:“準備できました" ,日语罗马拼音: "Junbi dekimashita”。然后考官给出指令,打右转向,左后、左镜、中镜、右镜、右后5点确认后出发。 **考试过程:** 技能考试的考点在发的资料上都有,尤为重要的,就是转向时提前打转向灯,中镜、左/右镜、左/右回头进行3点确认后,再动方向盘进行转向。出S弯、直角弯时要进行左后、左镜、中镜、右镜、右后5点确认后再转弯。遇到“止まれ”,日语罗马拼音:“tomare”,时要停止等待3~5秒再继续。 考试通过,会在停车后收回你的技能考试预约卡,再给你一张小粉票。没通过,需要拿着卡再去2楼最里面的窗口重新预约下一次考试。 ![小粉票 技能考试合格证书](/uploads/2025/02/20250218140435.jpg) 通过考试的要回等待室,等到所有人都考完,再由考官带着设置登录卡密码,然后再拿着这个小票,交费,2050日元,再到1楼拍照,再到2楼等待制证,制证完后大屏幕会叫号,不是单独的号,是xxxxx~xxxxx的区间,区间内的都可以去领证,拿到证后,在出口处自助机上可以核对一下证件信息。就可以回家了。 ![日本驾照 日本驾驶证](/uploads/2025/02/20250218140428.jpg) ### 心得体会 这不是广告,也不是攻略,只谈我自己的一点心得体会,请根据自身情况,仔细斟酌,仅供参考。 #### 1、找驾校、练车 小红书很多人说不需要驾校练车就能过,我想应该会有这种人,可能日语好,可能熟悉右驾驶,但不适合我这种既不会日语又没有右驾驶经验的人。如果你像我一样,可以找专门带队申请答辩的翻译,也有中文驾校申请答辩、练车一条龙的。报名之前各方面了解到换证大概需要3、4个月时间,但我很幸运,7天就完成了。 我找的是驾校(東京華人自動車学校),自己先去排队,工作时间到了驾校有老师来帮忙指导资料填写、陪同到窗口翻译、带着在各楼层办理业务,预约到技能考试后,开始安排练车,一共练了6节课,分3次,带我练车的是一位姓雷的教练挺负责,后来有一位临时带的不知道姓名也不错。 报名之前也看到了网上对各个驾校的评价,大多都是忘带练车票要交费补练车票,或练车时间没来不退费。觉得问题不大,就报名了,后来练了几次车,对东京华人可以中文沟通的驾校和练车有了一点点了解。 以我所在的练车场地(要坐车到琦玉与野本町站的),这里并不是驾校,这应该只是一个场地,场地内有N个驾校或个人教练带学员练车,可能小红书里活跃的驾校这都有。驾校的教练水平参差不齐,有踏实肯干埋头工作的,也有会营销宣传活跃在抖音小红书的,有说话生硬直截了当的,有表达委婉和蔼的,可能还有部分是兼职临时的。可能正是因为这种情况,才会出现之前说的网上对驾校的各种评价。但不管怎么样,你要清楚你是来干什么的,了解日本驾车要求,老老实实练车,拿证才是目的。我想每一个驾校每一个教练都会把这些技巧教给你。 不练车你是体会不到你要练多少次,才能不逆行,才能不把雨刷当转向的。 坐埼京线去与野本町的路上,坐在行车方向右侧座椅,可以看见富士山。 ![埼京线看富士山](/uploads/2025/02/20250218140502.jpg) 下电车后坐驾校的班车去练车场,位置有点偏。 ![琦玉与野本町练车场周边](/uploads/2025/02/20250218140515.jpg) 到达练车场,开始练车,第一次练车,赶上大风扬沙天气,练车场的树都被刮倒了。 ![琦玉与野本町练车场](/uploads/2025/02/20250218140510.jpg) #### 2、技能考试 考试前做了很多准备,看了很多视频和攻略,包括如何跟考官打招呼,各种加速,转弯等指令,但一上车的那一刻,全懵了,脑子一片空白,就说了一句:您好(こんにちは),连:準備ができました,都没说完,只说了準備,考官就用手示意发车了。考官好像是叫佐藤,全程严肃,发指令看你没反应会附加手势方向。反正我不懂他也只能比划了,看到考官不停的在单子上划线,划一次我懵一次,再划了4、5次的时候,我心想这大概就是挂了,也就基本放弃了,考到一半天降大雨,也是第一次打雨刷是因为下雨。直到停车后,考官给写了一个小粉票,才恍然大悟,日本好像没有划对号的习惯,可能划一线就是通过了吧。就这样,非常走运的通过了考试。对于考试,我认为,最重要的是心态,不紧张,我没克服紧张,但还好阴差阳错把划线理解错了,觉得挂了就放开心态,认真开完吧,无目的可能也就无压力了。再就是要能听懂1~30的数字,对我来说只记得了1、2、5、6、8、10、22,非常重要,然后就是左、右。其他的,不管紧张不紧张,也都听不懂。 ![鲛洲免许中心 技能考试的时候下雨了](/uploads/2025/02/20250218140345.jpg) 最后附上我觉得可以记住的考试用日语: 初次见面,请多关照: はじめまして、どうぞよろしくお願いします。 Hajimemashite, dōzo yoroshiku onegai shimasu. 我不太会说日语: 私は日本語があまり話せません。 Watashi wa Nihongo ga amari hanasemasen. 请系好安全带: シートベルトを締めてください。 Shītoberuto o shimete kudasai. 准备好了: 準備ができました。 Junbi ga dekimashita. 一(いち)Ichi 二(に)Ni 三(さん)San 四(し / よん)Shi / Yon 五(ご)Go 六(ろく)Roku 七(しち / なな)Shichi / Nana 八(はち)Hachi 九(きゅう / く)Kyū / Ku 十(じゅう)Jū 十一(じゅういち)Jūichi 十二(じゅうに)Jūni 十三(じゅうさん)Jūsan 十四(じゅうし / じゅうよん)Jūshi / Jūyon 十五(じゅうご)Jūgo 十六(じゅうろく)Jūroku 十七(じゅうしち / じゅうなな)Jūshichi / Jūnana 十八(じゅうはち)Jūhachi 十九(じゅうきゅう / じゅうく)Jūkyū / Jūku 二十(にじゅう)Nijū 二十一(にじゅういち)Nijūichi 二十二(にじゅうに)Nijūni 二十三(にじゅうさん)Nijūsan 二十四(にじゅうし / にじゅうよん)Nijūshi / Nijūyon 二十五(にじゅうご)Nijūgo 二十六(にじゅうろく)Nijūroku 二十七(にじゅうしち / にじゅうなな)Nijūshichi / Nijūnana 二十八(にじゅうはち)Nijūhachi 二十九(にじゅうきゅう / にじゅうく)Nijūkyū / Nijūku 三十(さんじゅう)Sanjū 左(ひだり)Hidari 右(みぎ)Migi 加速(加速)Kasoku 向左折(左折)Sasetsu 向右折(右折)Usetsu --- ## EndeavourOS 日常使用情况及常用软件安装 URL: https://www.zhaojian.net/endeavouros-daily-use-and-common-software-installation/ Date: 2025-02-18 Tags: EndeavourOS, Manjaro, Arch, Linux, Linux 微信, Linux QQ, Linux Timeshift, Linux fcitx5, Linux fcitx5-chinese-addons, Linux fcitx5-rime, Linux Brave, Linux VSCode, Linux WPS, Linux ONLYOFFICE, Linux qemu, Linux virt-manager, Linux easystroke, Linux Obsidian, Linux Dropbox, EndeavourOS 微信, EndeavourOS QQ, EndeavourOS Timeshift, EndeavourOS fcitx5, EndeavourOS fcitx5-chinese-addons, EndeavourOS fcitx5-rime, EndeavourOS Brave, EndeavourOS VSCode, EndeavourOS WPS, EndeavourOS ONLYOFFICE, EndeavourOS qemu, EndeavourOS virt-manager, EndeavourOS easystroke, EndeavourOS Obsidian, EndeavourOS Dropbox Categories: 技术 最近因为AUR在WeChat包上闹的想回Debian系,然而在尝试了几个不同的Linux 发行版后,感觉还是没有EndeavourOS用着顺手,虽说微信 Linux版和QQ Linux版都可以正常使用了,但我想在安装过程中就能够选择Btrfs分区和设置休眠,看来这只有EndeavourOS能满足了,折腾一气,又回来了。 ![EndeavourOS](/uploads/2025/02/EndeavourOS2501.png) 系统环境: 版本信息:[EndeavourOS](https://endeavouros.com/)(Endeavour_neo-2024.09.22) 桌面环境:KDE Plasma 6.2.5 ![EndeavourOS](/uploads/2025/02/KDE_Plasma2501.png) 常用软件使用原则 渠道选择:系统自带软件中心(Discover)> 软件官网 > Flathub > AUR > 第三方网站 软件包优先选择提供AppImage格式的 ### 1、启动蓝牙并设置开机启动 在我的电脑上,蓝牙一直遇到问题,EndeavourOS还好,只需要设置开机启动就OK了 ```bash sudo systemctl start bluetooth sudo systemctl enable bluetooth ``` ### 2、安装 Timeshift 使用Btrfs分区后,Timeshift可以更方便的备份,这样就不怕折腾了 ``` yay -S timeshift ``` ### 3、安装Fcitx5输入法 ##### fcitx5-rime fcitx5-chinese-addons的中文已经够好了,尤其是云拼音,但fcitx5-chinese-addons会把词库全部加载到运行内存中,增加内存使用量,而且无法直接输入邮箱、网址,所以选择了fcitx5-rime [Linux 拼音输入法词库导致 fcitx5 内存使用异常 内存占用增加](https://www.zhaojian.net/linux-pinyin-input-method-dictionary-is-causing-abnormal-memory-usage-in-fcitx5/) ``` yay -S fcitx5-im fcitx5-rime fcitx5-mozc ``` ##### fcitx5-chinese-addons ``` yay -S fcitx5-im fcitx5-chinese-addons fcitx5-mozc ``` 额外安装词库,以fcitx5-chinese-addons为例: ``` yay -S fcitx5-pinyin-zhwiki fcitx5-pinyin-sougou-dict-git fcitx5-pinyin-moegirl fcitx5-pinyin-custom-pinyin-dictionary ``` ### 4、安装浏览器 这里使用的是AUR中测试版,一方面能更早的体验新功能,二来也不喜欢那个橘红色。之前因为Chrome即将停止支持Manifest v2的扩展,选择了Brave浏览器,Brave默认规则就可以屏蔽YouTube等视频广告,但有两点不太满意,一是自建的翻译模块太卡,在国内无法使用,国外也太慢,二就是同步方法有点怪,搞不懂规则,有时候能马上同步,有时候很久也不同步。 ``` yay -S brave-beta-bin ``` 最近接连几次更换系统后Brave无法同步,之前也有超24小时候才同步的情况,但这几次2天了还没同步,准备换chrome了 ``` yay -S google-chrome-beta ``` ### 5、设置数字小键盘开机自动启动 在系统设置-键盘里面可以设置NumLock,但只在进入系统后有效,如果想在登录界面使用数字小键盘输入密码,还是无法满足。EndeavourOS默认使用的SDDM,需要修改 /etc/sddm.conf,增加以下内容。 ``` [General] Numlock=on ``` ### 6、安装开发相关软件 Remmina、FileZilla、DBeaver Community、Visual Studio Code(AUR) ``` yay -S remmina filezilla dbeaver visual-studio-code-bin ``` ### 7、下载、配置 QQ、微信的官方Linux版 因为AUR的wechat包闹的,不想再使用AUR了,自己下载配置一下也挺好 因为经常在不同系统下来回切换,所以我把微信和QQ单独建了个文件夹,把相关配置文件保存好,装好系统只要复制一份到/usr/share/applications/就可以了 具体方法可查看: [EndeavourOS、Manjaro等Arch系Linux安装新版Linux微信、QQ方法](https://www.zhaojian.net/arch-endeavouros-manjaro-linux-wechat-weixin-qq/) ``` sudo cp /home/zhaojian/Cores/Tools/Linux/QQ/qq.desktop /usr/share/applications/qq.desktop sudo cp /home/zhaojian/Cores/Tools/Linux/WeChat/wechat.desktop /usr/share/applications/wechat.desktop ``` 官方 [QQ Linux版](https://im.qq.com/linuxqq/index.shtml) 官方 [微信 Linux版](https://linux.weixin.qq.com/) ### 8、安装Office等常用软件 因为使用WPS Linux版导出PDF文件出现文字空白情况,现在WPS不再是唯一选项,同时还使用了ONLYOFFICE,互补着用吧。同时因发现 ONLYOFFICE 有 AppImage 格式的软件包,现在正由WPS Office for Linux向ONLYOFFICE Desktop Editors 迁移。 ##### WPS ``` yay -S wps-office-cn wps-office-mui-zh-cn ttf-wps-fonts ``` ONLYOFFICE https://www.onlyoffice.com/download-desktop.aspx ### 9、安装字体 思源黑体是由Adobe与Google合作开发的开源字体,Adobe名称:Source Han Sans;Google名称:Noto Sans CJK;中文通常叫思源黑体,都是一样的。一般情况选择中文系统就会默认安装,但还是有个别情况,如:WPS、微信等需要,所以重新安装一下。 ``` yay -S adobe-source-han-sans-cn-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra ``` ### 10、安装虚拟机相关软件QEMU、virt-manager Virt-Manager 是前端,提供了方便的 GUI,QEMU 是后端,提供底层支持。目前来看比 VMware Workstation Pro 要快 具体方法可查看: [EndeavourOS、Manjaro等Arch系Linux安装QEMU+KVM、libvirt、Virt-Manager虚拟机](https://www.zhaojian.net/arch-endeavouros-manjaro-linux-qemu-kvm-libvirt-virt-manager/) ### 11、安装Dropbox、easystroke(鼠标手势)AUR、Xmind 之前在国内的时候,因为未知原因,Dropbox是无法使用的,现在网络畅通无阻,感觉还是Dropbox用起来方便。另外,[easystroke](https://github.com/thjaeger/easystroke)始终是我在Linux下唯一使用也是非常需要的软件,因为Linux系统的右键触发原则和Windows不同,所以浏览器的鼠标手势扩展在Linux下无法正常使用,需要在系统环境中安装easystroke实现,但easystroke的开发者已多年没有更新,尤其在Wayland下虽然可以勉强使用,可根本无法显示鼠标手势轨迹。虽然有一个 [Mouse-Actions](https://github.com/jersou/mouse-actions)在easystroke的多个GitHub页面中声称自己是一个同类产品的替代,但使用后发现未知的错误更多,尤其是连基本的使用说明都没有,内存占用会随着使用时间增多,莫名报一些未知错误停止运行。结合Wayland一时半会也不会全面普及,还是老老实实使用x11,继续用AUR上的easystroke吧。 ``` yay -S dropbox easystroke xmind ``` ### 12、下载、配置 Obsidian ``` sudo nano /usr/share/applications/obsidian.desktop ``` ``` [Desktop Entry] Name=Obsidian Exec=/home/zhaojian/Cores/Tools/Obsidian/Obsidian.AppImage %U Terminal=false Type=Application Icon=/home/zhaojian/Cores/Tools/Obsidian/obsidian.png StartupWMClass=obsidian Comment=Obsidian MimeType=x-scheme-handler/obsidian; Categories=Office; ``` [Obsidian fow Linux(AppImage)](https://obsidian.md/download) --- ## 豚小蒙熏听机拆机维修方法 解决豚小蒙熏听机无声音 PIYO PEN故事机早教机 URL: https://www.zhaojian.net/tunxiaomeng-repair/ Date: 2025-01-26 Tags: 豚小蒙拆机, 豚小蒙维修, 豚小蒙熏听机拆机, 豚小蒙熏听机维修, 豚小蒙熏听机无声音, 豚小蒙熏听机不出声, 豚小蒙, 豚小蒙熏听机, 豚小蒙故事机, 豚小蒙早教机, 豚小蒙修理 Categories: 技术 > 豚小蒙熏听机拆机维修方法 解决豚小蒙熏听机无声音 PIYO PEN故事机早教机 前几天家里的豚小蒙熏听机被摔了一下就没声音了,本机和蓝牙都不出声,但蓝牙连接功能正常,觉得不应该是主机(主板)坏了,大概率是扬声器接触不严…… 前几天家里的豚小蒙熏听机被摔了一下就没声音了,本机和蓝牙都不出声,但蓝牙连接功能正常,觉得不应该是主机(主板)坏了,大概率是扬声器接触不严,奈何电烙铁不在身边,连简单的螺丝刀也没有,无法拆机,更别说维修了。 今天不知道从哪突然冒出一个小螺丝刀,想试一下看看能不能打开,拆机还是有点曲折,差点就暴力拆机给砸了,但总觉得还有一个隐藏的螺丝,还好最终找到成功拆机。 ![豚小蒙熏听机维修工具](/uploads/2025/01/txm250126l.jpg) 拆开这个豚小蒙熏听机,发现主板电源连接都正常,那就只有扬声器了,拆开扬声器的螺丝,果然连接处开焊,断了,不得不说,这简直就是一个设计缺陷,宣称是给小朋友的早教机,明知道用户群都是小朋友,那磕磕碰碰肯定无法避免,扬声器连接处竟然用这么细的金属丝连接,还没头发粗,一共没几根,又少又细,而且官方不是免费保修,自费邮寄,自费维修,至少我这个机器没有保修。 自己动手,没有电烙铁,没有配件,没有其他工具,就一个小螺丝刀和垃圾桶捡的金属扎丝,成功搞定,简单记录一些步骤。 ### 搞定6颗螺丝 豚小蒙熏听机一共6颗螺丝,正面1颗、背面2颗(红色1、2、3),内部扬声器周围3颗(蓝色1、2、3)。 #### 背面螺丝 沿着硅胶垫边缘,撬开硅胶垫,最好在红色箭头处撬开,可以最小化撕开,我的全部撕开了,脏得一塌糊涂。撬开后,卸下红色1、2位置的螺丝。 ![豚小蒙熏听机背面螺丝](/uploads/2025/01/txm250126a.jpg) 卸下后的样子 ![豚小蒙熏听机拆机](/uploads/2025/01/txm250126b.jpg) #### 正面螺丝 正面的这个螺丝,找了很久才找到,如果这个螺丝不卸下,肯定就拆坏了。这个扬声器罩上有胶,之间拆有点难,拿风筒对着吹热了,沿着红色箭头处就能撬开了。撬开后,卸下红色3位置的螺丝。 ![豚小蒙熏听机正面螺丝](/uploads/2025/01/txm250126c.jpg) 卸下后的样子 ![豚小蒙熏听机拆机](/uploads/2025/01/txm250126d.jpg) #### 内部螺丝 蓝色1、2、3的位置,卸下螺丝后,可以看见扬声器了我的在红色箭头处的红线断开了,所以无声音,我看黑色箭头处的黑线也快断了,就顺手也给拽下来了 ![显示](/uploads/2025/01/txm250126e.jpg) 卸下后的样子 ![豚小蒙熏听机内部螺丝](/uploads/2025/01/txm250126f.jpg) 全家福一张,这就是豚小蒙熏听机的全部配件了 ![豚小蒙熏听机拆机](/uploads/2025/01/txm250126g.jpg) ### DIY配件 原来的连接线又细又短,怕禁不住折腾,我准备废物利用,用金属扎丝做连接线,分别在两端开了两个口,方便重接、延长。 ![豚小蒙熏听机拆机](/uploads/2025/01/txm250126h.jpg) 在原连接线上也开个口,准备重接,看看这线,有多细,生产的时候咋想的,就想着多卖几个吗? ![豚小蒙熏听机拆机](/uploads/2025/01/txm250126i.jpg) 连接延长线 ![豚小蒙熏听机拆机](/uploads/2025/01/txm250126j.jpg) 重新连接扬声器 ![豚小蒙熏听机拆机](/uploads/2025/01/txm250126k.jpg) 把配件重新安装,拧上螺丝,成功解决豚小蒙熏听机无声音,不出声的问题。
--- ## EndeavourOS、Manjaro等Arch系Linux安装QEMU+KVM、libvirt、Virt-Manager虚拟机 URL: https://www.zhaojian.net/arch-endeavouros-manjaro-linux-qemu-kvm-libvirt-virt-manager/ Date: 2025-01-17 Tags: EndeavourOS, Manjaro, Arch, Linux, qemu, libvirt, virt-manager, arch安装qemu, arch安装libvirt, arch安装virt-manager, EndeavourOS安装qemu, EndeavourOS安装libvirt, EndeavourOS安装virt-manager, Manjaro安装qemu, Manjaro安装libvirt, Manjaro安装virt-manager Categories: 技术 QEMU、KVM、libvirt 和 Virt-Manager 是构建虚拟化解决方案的关键组件,它们各自承担不同的角色,但相互协作以提供强大的虚拟化功能。 **QEMU** 是一个开源的通用硬件模拟器和虚拟机管理器。既可以作为纯模拟器运行(性能较低),也可以结合 KVM 提供硬件加速的虚拟化(性能较高,媲美裸机)。 **KVM** 是 Linux 内核中的一个模块,直接运行在 Linux 内核上,借助硬件虚拟化技术,可达到接近原生硬件的性能。 **libvirt** 是一个开源的 API 和工具集,用于管理虚拟化平台(如 QEMU/KVM、Xen、VMware、Hyper-V 等)。 **Virt-Manager** 是一个基于图形界面的管理工具,本身并不直接管理虚拟机,专门用于管理 libvirt 提供的虚拟机。主要面向不熟悉命令行的用户,提供方便的图形化界面。 **KVM** Linux 内核自带,与 QEMU 集成后实现高性能的虚拟化。libvirt 简化了 QEMU 的复杂性,提供了命令行操作的管理功能,是虚拟化管理的核心工具。**Virt-Manager** 是 libvirt 的图形界面,适合需要GUI图形化界面的用户更便捷的管理虚拟机。 #### 安装虚拟机运行所需要的组件 ``` yay -S qemu virt-manager virt-viewer dnsmasq vde2 bridge-utils openbsd-netcat ebtables swtpm sudo systemctl enable libvirtd.service sudo systemctl start libvirtd.service sudo usermod -aG libvirt $USER ``` 1. qemu是一个通用且开源的虚拟机和模拟器。它允许您在一个操作系统中运行其他操作系统,支持完整的系统虚拟化和进程仿真。 2. virt-manager是一个图形化的虚拟机管理工具,简化了虚拟机的创建、管理和监控。 3. virt-viewer是一个轻量级的远程查看工具,允许连接到虚拟机的图形控制台(通过 SPICE 或 VNC 协议)。 4. dnsmasq是一个轻量级的 DNS 和 DHCP 服务器。Libvirt 使用它为虚拟机提供 NAT 网络连接(默认设置)。 5. vde2是一个虚拟交换机,用于创建虚拟网络环境。可选工具,主要用于高级虚拟网络配置,适合需要复杂网络拓扑的用户。 6. bridge-utils提供了桥接网络的管理工具,用于将虚拟机的网络接口桥接到物理网络接口。如果您需要虚拟机直接访问外部网络(桥接模式),这是必需的。 7. openbsd-netcat是一个用于网络调试和数据传输的工具,支持 TCP 和 UDP 协议。Libvirt 使用它进行一些网络相关的任务(例如,远程主机之间的数据传输)。 8. ebtables是一个用户空间工具,用于管理 Linux 内核的网桥过滤表。在桥接网络中,管理虚拟机的网络流量规则时需要使用。 9. swtpm是一个软件模拟的 TPM,允许虚拟机使用 TPM 功能而不需要物理硬件支持。支持 Windows 11 或其他需要 TPM 的应用场景。 #### 在QEMU、virt-manager下实现剪贴板共享、文件拖放功能 ``` yay -S spice-vdagent qemu-guest-agent sudo pacman -S spice-vdagent qemu-guest-agent ``` 1. spice-vdagent 主要用于增强用户体验,提供剪贴板共享、文件拖放等功能。 2. qemu-guest-agent 则提供虚拟机与宿主机之间的管理和通信能力,允许虚拟机执行更高效的操作和管理任务。 安装完毕后,需在 virt-manager (Linux宿主机端)设置 虚拟机 1. 显示协议 Spice Spice 服务器 - 类型:Spice 服务器 ![显示协议 Spice](/uploads/2025/01/spice2501.png) 2. 添加硬件(两个): 通道:名称选择 com.redhat.spice.0 通道:名称选择 org.qemu.guest_agent.0 ![添加硬件 通道 com.redhat.spice.0](/uploads/2025/01/spice2501a.png) ![添加硬件 通道 org.qemu.guest_agent.0](/uploads/2025/01/qemu.ga.png) 在虚拟机内(客户机、所安装的虚拟机系统)安装[Spice Guest Tools](https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe)软件,实现剪贴板共享、文件拖拽等功能的支持。 如运行时出现“启动域时出错: 所需操作无效:网络 'default' 未激活”,需启动 default 网络。 启动 default 网络 ``` sudo virsh net-start default ``` 设置开机自动启动 ``` sudo virsh net-autostart default ``` --- ## EndeavourOS、Manjaro等Arch系Linux安装新版Linux微信、QQ方法 URL: https://www.zhaojian.net/arch-endeavouros-manjaro-linux-wechat-weixin-qq/ Date: 2025-01-07 Tags: EndeavourOS, Manjaro, Arch, Linux, Linux 微信, Linux QQ, 微信, QQ, Linux WeChat, Arch安装微信, Arch安装QQ, EndeavourOS安装微信, EndeavourOS安装QQ, Manjaro安装微信, Manjaro安装QQ, Linux安装微信, Linux安装QQ Categories: 技术 最近因为AUR在WeChat包上闹的换回了Debian,用了几天竟然有点不习惯,在尝试了几个不同的Debian系 发行版后,感觉还是没有EndeavourOS用着顺手,兜兜转转又换回了EndeavourOS,但实在是分不清、看不懂也不想再卷入AUR的wechat闹剧了。 选择最原始、最简单的方法,下载官方网站 AppImage 格式软件包,自建开始菜单快捷方式。 ### 微信 Linux 版 ##### 1、下载官方最新 微信 Linux 版,建议保存到非默认下载目录。 微信 Linux 版 官网:[https://linux.weixin.qq.com/](https://linux.weixin.qq.com/) ![微信 Linux 版 官网](/uploads/2025/01/wechat_appimage.png) 微信高清logo(非官方):[https://github.com/zhaojiannet/zhaojiannet.github.io/tree/main/uploads/2025/01/wechat_logo.png](https://github.com/zhaojiannet/zhaojiannet.github.io/tree/main/uploads/2025/01/wechat_logo.png) ##### 2、创建开始菜单快捷方式 使用nano在/usr/share/applications目录下,创建wechat.desktop ``` sudo nano /usr/share/applications/wechat.desktop ``` wechat.desktop文件内容: ``` [Desktop Entry] Encoding=UTF-8 Type=Application #应用名称 Name=微信 #图标路径(建议与上面下载的AppImage软件包放到一起) Icon=/home/zhaojian/Cores/Tools/Linux/WeChat/wechat_logo.png #启动是否开启终端 Terminal=false #AppImage文件路径(上面下载保存的AppImage软件包路径) Exec=/home/zhaojian/Cores/Tools/Linux/WeChat/WeChatLinux_x86_64.AppImage #分类目录 Categories=Network; #说明 Comment=微信 Linux桌面版 ``` 依次输入:Ctrl + X、Y、回车键,保存。 ### QQ Linux 版 ##### 1、下载官方最新 QQ Linux 版,建议保存到非默认下载目录。 QQ Linux 版 官网:[https://im.qq.com/linuxqq/](https://im.qq.com/linuxqq/) ![QQ Linux 版 官网](/uploads/2025/01/qq_appimage.png) QQ高清logo(非官方):[https://github.com/zhaojiannet/zhaojiannet.github.io/tree/main/uploads/2025/01/qq_logo.png](https://github.com/zhaojiannet/zhaojiannet.github.io/tree/main/uploads/2025/01/qq_logo.png) ##### 2、创建开始菜单快捷方式 使用nano在/usr/share/applications目录下,创建qq.desktop ``` sudo nano /usr/share/applications/qq.desktop ``` qq.desktop文件内容: ``` [Desktop Entry] Encoding=UTF-8 Type=Application #应用名称 Name=QQ #图标路径(建议与上面下载的AppImage软件包放到一起) Icon=/home/zhaojian/Cores/Tools/Linux/QQ/qq_logo.png #启动是否开启终端 Terminal=false #AppImage文件路径(上面下载保存的AppImage软件包路径) Exec=/home/zhaojian/Cores/Tools/Linux/QQ/QQ_3.2.15_241224_x86_64_01.AppImage #分类目录 Categories=Network; #说明 Comment=QQ Linux桌面版 ``` 依次输入:Ctrl + X、Y、回车键,保存。 我的最终目录是这样,把AppImage、desktop、png文件保存在了一起,这样每次更换系统后迁移就方便多了,只需要copy一个desktop到/usr/share/applications目录就OK了 ![WeChat QQ 目录](/uploads/2025/01/wechat_qq_files.png) 腾讯官方最新发布的Linux 4.0.1 测试版,已经再不断改进中可以正常使用了,如果在使用中遇到问题,还可以加 微信Linux版官方QQ交流群:736511883 反馈。 加上早就可以正常使用的QQ Linux版,腾讯系现在就差企业微信和腾讯会议不能完美支持Linux了。 --- ## IT课程 JavaScript基础 042_循环 while、for URL: https://www.zhaojian.net/it-course-javascript-042/ Date: 2024-12-28 Tags: IT课程, HTML课程, CSS课程, JavaScript课程, Java课程, 计算机系统与网络, JavaScript条件分支, JavaScript条件分支语句, 条件分支语句, 条件分支, 循环, JavaScript 循环, JavaScript while, JavaScript for Categories: 学习 / JavaScript基础 循环语句是用于重复执行一段代码块的方法,JavaScript 提供了 `while`、`do-while`、`for` 等不同类型的循环语句。 一个完整的循环体包括:初始化表达式、循环条件和迭代器。 ### `while` 循环 `while` 循环用于在条件为 `true` 的情况下,重复执行一段代码。 循环体的单次执行叫作 **一次迭代**。 任何表达式或变量都可以是循环条件,循环条件会被计算,结果会转化为布尔值。 与 `if` 类似,如果循环体只有一条语句,也可以省略大括号 `{…}`,但不推荐这样。 每次迭代之前都要检查条件。 示例: ```js let i = 0; // 初始化表达式,通常用于声明计数器变量,没有会报错 undefined while (i < 5) { // 循环条件,为 `true`,循环将一直执行 console.log(i); i++; // 迭代器,通常用于更新计数器变量,匹配循环条件 } ``` 死循环示例: ```js let i = 0; while (1) { // 条件始终为 true 会进入死循环 console.log(i); i++; // 通常适用此形式的计数器更新循环条件 if (i >= 5) break; // 注释掉即进入死循环模式 } ``` *** ### `do-while` 循环 `do-while` 循环与 `while` 循环类似,但它先执行一次循环体,然后检查条件是否为 `true`,如果条件为真时,则继续执行循环体。 需要注意使用场景,只有在不管条件是否为真,都要 **至少执行一次** 循环体时,才使用 `do-while`,其它场景推荐 `while` 循环。 每次迭代后都要检查条件。 示例: ```js let i = 0; do { console.log(i); i++; } while (i < 5); ``` *** ### `for` 循环 `for` 循环是一种更加复杂,但也最常适用的循环结构,用于重复执行一段代码。 `for` 循环包含三个部分:初始化表达式、循环条件和迭代器。以下是 `for` 循环的基本语法: 每次迭代之前都要检查条件,可以使用其他设置。 示例: ```js for (let i = 0; i < 5; i++) { console.log(i); } ``` 死循环示例: ```js let i = 0; for ( ; ; ) { // 省略所有条件时,会进入死循环 console.log(i); i++; // 通常适用此形式的计数器更新循环条件 if (i >= 5) break; // 注释掉即进入死循环模式 } ``` ##### 省略语句段 `for` 循环可以省略初始化表达式、循环条件或迭代器中的任意一个或多个,但分号 `;` 必须保留。分号用于分隔各个部分,省略其中一个部分时仍需要保留相应的分号。 示例: ```js let x = 0; for (; x < 5; x++) { console.log(x); } // 省略初始化表达式,将其移到循环外部,循环仍然有效 let y = 0; for (;; y++) { if (y >= 5) { break; } console.log(y); } // 省略循环条件,通过 `if` 语句和 `break` 来终止循环 let z = 0; for (; z < 5;) { console.log(z); z++; } // 省略迭代器,迭代器被移到循环体内,循环仍然有效 ``` *** ### 循环嵌套 嵌套循环是指在一个循环体内包含另一个完整的循环结构。嵌套循环在每次执行外部循环时,同时执行一次内部循环。 正三角示例: ```js // 示例 A for (let i = 1; i <= 5; i++) { // 外部循环,控制行数,从 1 到 5。 let row = ''; // 每次执行外部循环时,创建一个空字符串 `row`,用于存储当前行的星号。 for (let j = 1; j <= i; j++) { // 内部循环,控制每行的星号数量,从 1 到当前行数 `i`。 row += '⭐ '; // 将星号追加到 `row` 中,形成当前行的星号字符串。 } console.log(row); // 输出当前行的星号字符串。 } ``` ```js // 示例 B for (let i = 1; i <= 5; i++) { // 外循环表示行数 for (let j = 1; j <= i; j++) { // 内循环表示列 document.write('⭐'); // 使用星号作为图形元素 } document.write('
'); // 换行 } ``` 倒三角示例: ```js // 示例 A for (let i = 5; i >= 1; i--) { // 外部循环,控制行数,从 1 到 5。 let row = ''; // 每次执行外部循环时,创建一个空字符串 `row`,用于存储当前行的星号。 for (let j = 1; j <= i; j++) { // 内部循环,控制每行的星号数量,从 1 到当前行数 `i`。 row += '* '; // 将星号追加到 `row` 中,形成当前行的星号字符串。 } console.log(row); // 输出当前行的星号字符串。 } ``` ```js // 示例 B for (let i = 1; i <= 5; i++) { // 外循环表示行数 for (let j = 0; j <= 5 - i; j++) { // 内循环表示列 document.write('⭐'); // 使用星号作为图形元素 } document.write('
'); // 换行 } ``` *** ### `break` 终止(结束、跳出)循环 `break` 用于终止(结束、跳出)当前的循环或 `switch` 语句,如果没有 `break`,则会继续执行后续 `case`(即发生“穿透”现象)。 "无限循环 + `break`" 的组合适用于不必在循环开始/结束时检查条件,但需要在中间甚至是主体的多个位置进行条件检查的情况。 示例: ```js let count = 0; while (true) { console.log("循环中..."); // 模拟某个条件,当满足时跳出循环 if (count === 5) { console.log("满足条件,跳出循环"); break; } count++; } ``` *** ### `continue` 继续下一次(跳过)循环 `continue` 用于在循环中提前结束当前迭代,并继续下一次迭代。 `continue` 是 `break` 的 “轻量版”,它不会停掉整个循环。而是停止当前这一次迭代,并强制启动新一轮循环(如果条件允许的话)。 示例: ```js for (let i = 0; i < 8; i++) { if (i % 2 === 0) { continue; // 当 i 取余为 2 时跳过当前迭代,继续下一次迭代 } console.log(i); } ``` --- ## IT课程 JavaScript基础 041_条件分支 if、else、switch URL: https://www.zhaojian.net/it-course-javascript-041/ Date: 2024-11-14 Tags: IT课程, HTML课程, CSS课程, JavaScript课程, Java课程, 计算机系统与网络, JavaScript条件分支, JavaScript条件分支语句, 条件分支语句, 条件分支, JavaScript if, JavaScript else, JavaScript else if, JavaScript 三元运算符, JavaScript switch Categories: 学习 / JavaScript基础 JavaScript 中的条件语句主要包括 `if`、`else if`、`else` 和 `switch`。 ### `if` 语句 `if` 语句用于根据一个条件判断是否执行某段代码。当 `if(...)` 语句括号里的条件表达式为 `true`,则执行 `if` 后的 **一行** 语句。 如果希望控制多行代码,可以使用 `{}` 将语句括起来。建议每次使用 `if` 语句都用大括号 `{}` 来包装代码块,即使只有一条语句,这样可以提高代码可读性。 如果条件表达式为 `false` 则不执行。 如果 `if` 后的条件表达式不是布尔值,会先转换为布尔值然后再运算。数字 `0`、空字符串 `""`、`null`、`undefined` 和 `NaN` 都会被转换成 `false`。其它值被转换为 `true`。 示例: ```js let age = 18; if (age >= 18) console.log('成年人'); if (age >= 18) { console.log('成年人'); } ``` ### `if-else` 语句 `if-else` 语句可根据不同条件执行不同的代码块,如果该表达式的值为 `true`,则执行 `if` 后面的代码块;否则执行 `else` 后面的代码块。 示例: ```js let age = 25; if (age >= 18) { console.log('成年人'); } else { console.log('未成年人'); } ``` ### `else if` 语句 `else if` 语句是在 `if-else` 结构中使用的扩展,允许你添加多个条件进行判断。 `else if` 语句会自上而下依次对 `if` 后的条件表达式进行求值判断,直到出现 `true` 条件为止。当出现 `true` 条件时,后面的条件就不会再继续求值判断了,需要合理安设计条件的排列顺序或增加逻辑运算条件。 示例: ```js let score = 95; if (score >= 90) { console.log('优秀'); } else if (score >= 60) { //尝试把次条件排序到第一试试结果如何? console.log('及格'); } else { console.log('不及格'); } ``` ### `switch` 语句 `switch` 语句可替代多个`if`判断,根据表达式的值进行多分支选择。 `switch` 语句在执行时,会依次将 `switch` 后的表达式和 `case` 后的表达式进行 **严格相等** 比较 如果比较结果为 `true`,`switch` 语句就执行相应 `case` 后的代码块,直到遇到最靠近的 `break` 语句(或者直到 `switch` 语句末尾)。 如果没有符合的 `case`,则执行 `default` 代码块(如果 `default` 存在)。 示例: ```js let day = 7; switch (day) { case 1: console.log('星期一'); break; case 2: console.log('星期二'); break; case 6: //case 分组 case 7: //共享同一段代码的几个 case 分支可以被分为一组 console.log('周末'); break; default: console.log('其他'); } ``` ### `break` 终止(结束、跳出)循环 `break` 用于终止(结束、跳出)当前的循环或 `switch` 语句,如果没有 `break`,则会继续执行后续 `case`(即发生“穿透”现象)。 示例: ```js let day = 2; switch (day) { case 1: console.log('星期一'); break; case 2: console.log('星期二'); // 没有 break,会继续执行下一个 case case 3: console.log('星期三'); break; default: console.log('其他'); } ``` --- ## IT课程 JavaScript基础 040_运算符 URL: https://www.zhaojian.net/it-course-javascript-040/ Date: 2024-10-30 Tags: IT课程, HTML课程, CSS课程, JavaScript课程, Java课程, 计算机系统与网络, JavaScript运算符 Categories: 学习 / JavaScript基础 JavaScript 运算符用于对数学运算、比较、逻辑运算等操作并返回结果。 ### 算术运算符 - `+`:加法 - `-`:减法 - `*`:乘法 - `/`:除法 - `%`:取余数 - `**`:求幂 示例: ```js let a = 5; let b = 2; console.log(a + b); // 输出 7 console.log(a - b); // 输出 3 console.log(a * b); // 输出 10 console.log(a / b); // 输出 2.5 console.log(a % b); // 输出 1 console.log(a**b);  // 输出 25 ``` *** ### 赋值运算符 - `=`:赋值 - `+=`:加法赋值 - `-=`:减法赋值 - `*=`:乘法赋值 - `/=`:除法赋值 - `%=`:取余赋值 - `**=`:求幂赋值 - `??=`:空赋值,当变量值为null或undefined时才会进行赋值 示例: ```js let x = 5; x += 2; // x = x + 2; 输出 7 x -= 2; // x = x - 2; 输出 3 x *= 2; // x = x * 2; 输出 10 x /= 2; // x = x / 2; 输出 2.5 x %= 2; // x = x % 2; 输出 1 x **= 2; // x = x ** 2; 输出 25 x ??= 2; // 输出 5,当x为null或undefined时赋值为2 console.log(x); ``` *** ### 比较运算符 - `==`:相等(值的类型会自动转换) - `===`:全等(值和类型都相等) - `!=`:不相等 - `!==`:不全等 - `>`:大于 - `<`:小于 - `>=`:大于等于 - `<=`:小于等于 遇到非数值时,会先转换为数值后再比较,当遇到字符串时,会逐位地比较字符的 Unicode 编码。 示例: ```js let a = 5; let b = '5'; let c = 10; console.log(a == b); // 输出 true,值相等 console.log(a === b); // 输出 false,类型不相等 console.log(a != b); // 输出 false,值相等 console.log(a !== b); // 输出 true,类型不相等 console.log(a > c); // 输出 false,5 < 10 console.log(a < c); // 输出 true,5 < 10 console.log(a >= c); // 输出 false,5 <= 10 console.log(a <= c); // 输出 true,5 <= 10 ``` *** ### 逻辑运算符 逻辑运算符在处理操作数时,会将其转化为布尔值,并返回这个操作数的初始值。 ##### `&&`:逻辑与 用于判断条件是否同时为 `true`。如果所有条件都为 `true`,那么整个表达式的结果为 `true`;否则,结果为 `false`。 与运算从左到右依次寻找第一个 `false` ,如果找到 `false` 就停止计算,并返回这个操作数的初始值(短路求值)。如果最终没有 `false` 则返回最后一个 `true`。 ##### `||`:逻辑或 用于判断条件中至少有一个为 `true` 的情况。如果至少有一个条件为 `true`,那么整个表达式的结果为 `true`;如果所有条件都为 `false`,结果为 `false`。 或运算从左到右依次寻找第一个 `true` ,如果找到 `true` 就停止计算,并返回这个操作数的初始值(短路求值)。如果最终没有 `true` 则返回最后一个 `false`。 ##### `!`:逻辑非 用于对一个布尔值进行取反操作。如果一个值为 `true`,使用逻辑非运算符将其取反为 `false`;如果一个值为 `false`,将其取反为 `true`。 逻辑非还可以用于将非布尔值转换为布尔值。它会将任何非 `null`、`undefined`、`0`、`NaN`、`""`(空字符串)的值转换为 `true`,而上述值本身都被转换为 `false`。 示例: ```js let a = true; let b = false; let c = "hello"; let d = null; console.log(a && b); // 输出 false console.log(c && d); // 输出 null console.log(a || b); // 输出 true console.log(c || d); // 输出 hello console.log(!a); // 输出 false console.log(!d); // 输出 true ``` *** ### 三元运算符 - `condition ? expr1 : expr2`:如果条件为真,则返回 `expr1`,否则返回 `expr2`。 示例: ```js let age = 18; let status = (age >= 18) ? '成年人' : '未成年人'; console.log(status); // 输出 '成年人' ``` *** ### 空值合并运算符 空值合并运算符(Nullish Coalescing Operator)是用于处理默认值的运算符,通常用于确保一个变量具有非空(非 `null` 和非 `undefined`)的值。该运算符的语法是 `??`。 当使用空值合并运算符时,它会返回第一个定义(非 `null` 和非 `undefined`)的操作数,如果第一个操作数为 `null` 或 `undefined`,则返回第二个操作数。 示例: ```js let num1 = 0; let num2 = 1; let result = num1 ?? num2; console.log(result); // 输出 0,因为 num 不为 null 或 undefined let user; console.log(user ?? "匿名"); // 输出 匿名,因为 user 未定义 ``` *** ### 位运算符 - `&`:按位与 - `|`:按位或 - `^`:按位异或 - `~`:按位取反 - `<<`:左移 - `>>`:右移 - `>>>`:无符号右移 示例: ```js let a = 5; // 二进制:0101 let b = 3; // 二进制:0011 console.log(a & b); // 输出 1(按位与) console.log(a | b); // 输出 7(按位或) console.log(a ^ b); // 输出 6(按位异或) console.log(~a); // 输出 -6(按位取反) console.log(a << 1); // 输出 10(左移) console.log(a >> 1); // 输出 2(右移) ``` *** ### 其他运算符 - `typeof`:返回一个字符串,表示未经计算的操作数的类型。 - `instanceof`:用于测试对象是否是指定类型的实例。 示例: ```js let str = 'Hello'; console.log(typeof str); // 输出 'string' let arr = [1, 2, 3]; console.log(arr instanceof Array); // 输出 true ``` *** ### `+`(加号) 在 JavaScript 中,加号 `+` 有多重用途,包括数学运算、字符串拼接和一元操作。 ##### 数学运算 示例: ```js let a = 5; let b = 3; let result = a + b; console.log(result); // 输出 8 ``` 如果都是数字,`+` 被用于执行数学加法。 ##### 字符串拼接 示例: ```js let str1 = 'Hello'; let str2 = ' World'; let result = str1 + str2; console.log(result); // 输出 'Hello World' ``` 如果其中一个操作数是字符串,`+` 将执行字符串拼接。 ##### 一元加法运算符 示例: ```js let str = '42'; let num = +str; console.log(num); // 输出 42 ``` 在单个操作数前使用 +,它可以将操作数转换为数字,这是一元加法运算符的功能。 ##### 类型转换 示例: ```js let num = 42; let str = '10'; let result = num + str; // 隐式类型转换(类型强制转换) console.log(result); // 输出 '4210' ``` 如果其中一个操作数是字符串,+ 会进行类型转换,将其他操作数转换为字符串,然后执行字符串拼接。 ##### 连接数组 示例: ```js let arr1 = [1, 2, 3]; let arr2 = [4, 5, 6]; let result = arr1 + arr2; console.log(result); // 输出 '1,2,34,5,6' ``` 当一个操作数是数组时,+ 会将数组转换为字符串,然后进行字符串拼接。 ##### 特殊情况 示例: ```js let specialResult1 = '1' + 2 + 3; console.log(specialResult1); // 输出 '123' let specialResult2 = 2 + 3 + '1'; console.log(specialResult2); // 输出 '51' ``` specialResult1,因为字符串出现在 + 的最左边,后续的数字会被当作字符串进行拼接。 specialResult2,因为字符串出现在 + 的最右边,之前的数字会先进行数学运算后再进行拼接。 *** ### `-`(减号) 在 JavaScript 中,减号 `-` 是一个用于执行数学减法的运算符。 ##### 数学减法 示例: ```js let a = 5; let b = 3; let result = a - b; console.log(result); // 输出 2 ``` 如果都是数字,`-` 被用于执行数学减法。 ##### 一元减法运算符 示例: ```js let num = 42; let result = -num; console.log(result); // 输出 -42 ``` 在单个操作数前使用 `-`,它可以执行一元减法运算,将操作数变为其相反数。 ##### 类型转换 示例: ```js let num1 = 42; let str = '10'; let result = num1 - str; console.log(result); // 输出 32 ``` 如果其中一个操作数是字符串,`-` 会进行类型转换,将其他操作数转换为数字,然后执行数学减法。 ##### 特殊情况 示例: ```js let specialResult = '10' - 2; console.log(specialResult); // 输出 8 ``` 在这个特殊的情况下,因为字符串中的内容可以被成功转换为数字,`-` 会执行数学减法。 *** ### `=、==、===`(赋值、宽松相等、严格相等) 在 JavaScript 中,等号 `=` 是赋值运算符,而 `==` 和 `===` 是比较运算符。宽松相等会将两个操作数转换为相同类型,然后再进行比较。在条件判断中,通常使用 `===` 进行严格相等性比较,因为它不会进行类型转换。 ##### 赋值运算符 `=` 用于将右侧的值赋给左侧的变量。 示例: ```js let x = 5; let y = 'Hello'; console.log(x); // 输出 5 console.log(y); // 输出 'Hello' ``` 在这个例子中,`=` 将右侧的值赋给左侧的变量 `x` 和 `y`。 ##### 比较运算符 `==` 和 `===` 用于比较两个值的相等性。 示例: ```js let a = 5; let b = '5'; console.log(a == b); // 输出 true console.log(a === b); // 输出 false ``` `==` 进行相等性比较时,会进行类型转换,`null == undefined` 输出 `true`。 `===` 进行相等性比较时,要求值和类型都相等,`null === undefined` 输出 `false`。 `NaN` 不等于任何值,包括 `NaN` 本身。 *** ### `++`、`--`(自增、自减) 在 JavaScript 中,自增(`++`)和自减(`--`)是用于增加或减少变量值的操作符。 ##### 自增运算符 (++) 使用后会使得原来的变量立刻增加 1。 前置自增,返回自增后的值(新值); 后置自增,返回自增前的值(旧值); 前置自增示例: ```js let a = 5; // 前置自增,先增加 1,然后再使用新的值 let b = ++a; console.log(b); // 输出 6 console.log(a); // 输出 6 ``` 在这个例子中,`a` 先增加了 1,然后 `b` 获取了新的 `a` 值(6)。 后置自增示例: ```js let x = 5; // 后置自增,先使用当前值,然后再增加 1 let y = x++; console.log(y); // 输出 5 console.log(x); // 输出 6 ``` 在这个例子中,`y` 先获得了 `x` 的当前值(5),然后 `x` 的值增加了 1。 ##### 自减运算符 (--) 使用后会使得原来的变量立刻减少 1。 前置自减,返回自减后的值(新值); 后置自减,返回自减前的值(旧值); 前置自减示例: ```js let p = 10; // 前置自减,先减少 1,然后再使用新的值 let q = --p; console.log(q); // 输出 9 console.log(p); // 输出 9 ``` 在这个例子中,`p` 先减少了 1,然后 `q` 获取了新的 `p` 值(9)。 后置自减示例: ```js let m = 8; // 后置自减,先使用当前值,然后再减少 1 let n = m--; console.log(n); // 输出 8 console.log(m); // 输出 7 ``` 在这个例子中,`n` 先获得了 `m` 的当前值(8),然后 `m` 的值减少了 1。 ### 运算符优先级: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_precedence --- ## IT课程 JavaScript基础 039_类型转换 URL: https://www.zhaojian.net/it-course-javascript-039/ Date: 2024-09-23 Tags: IT课程, HTML课程, CSS课程, JavaScript课程, Java课程, 计算机系统与网络, JavaScript数据类型, JavaScript 类型转换 Categories: 学习 / JavaScript基础 类型转换是将一个数据类型转换为另一个数据类型的过程。类型转换可以是隐式的(由JavaScript引擎自动完成)或显式的(通过编码进行手动转换)。 ### 隐式类型转换(类型强制转换) 在一些操作中,JavaScript会自动进行类型转换,以便进行运算或比较。 示例: ```js let num = 5 + "5"; console.log(num); // 输出 "55",数字和字符串相加,数字被转换为字符串 ``` ### 显式类型转换 ##### 字符串转换 `String()` 函数: 将其他类型转换为字符串。 示例: ```js let num = 123; let str1 = String(num); // String() 函数,可处理 `null` 或 `undefined` let str2 = num.toString(); // toString() 方法,无法处理 `null` 或 `undefined` let str3 = num + ""; // 通过与空字符串相加,得到隐式类型转换的字符串 console.log(str1); // 输出 "123" console.log(str2); // 输出 "123" console.log(str3); // 输出 "123" ``` ##### 数字转换 `Number()` 函数: 将其他类型转换为数字。 示例: ```js let str1 = "123"; let str2 = ""; let str3 = "aaa"; let num1 = Number(str1); let num2 = Number(str2); let num3 = Number(str3); let num4 = +str1; console.log(num1); // 输出 123 console.log(num2); // 输出 0 console.log(num3); // 输出 NaN console.log(num3); // 输出 123,如果使用-号,输出-123 ``` 注意:如果字符串不能被解析为有效的数字,结果将是 NaN(Not a Number)。 `parseInt()` 和 `parseFloat()` 函数: 将 **字符串** 转换为整数或浮点数。 示例: ```js let str = "42"; let num = parseInt(str); console.log(num); // 输出 42 let str = "3.14"; let num = parseFloat(str); console.log(num); // 输出 3.14 ``` ##### 布尔值转换 `Boolean()` 函数: 将其他类型转换为布尔值。 示例: ```js let value = "Hello"; let bool1 = Boolean(value); let bool2 = !value; console.log(bool1); // 输出 true,非空字符串转换为 true console.log(bool2); // 输出 true,使用逻辑非对非布尔值隐式转换(!值为false,再使用!!取正) ``` 注意:0、NaN、null、undefined、空字符串等(空的、没有的、错误的)会转换为 false,其它值、对象会转换为 true。 --- ## IT课程 JavaScript基础 038_数据类型 URL: https://www.zhaojian.net/it-course-javascript-038/ Date: 2024-08-22 Tags: IT课程, HTML课程, CSS课程, JavaScript课程, Java课程, 计算机系统与网络, JavaScript数据类型, JavaScript Number, JavaScript BigInt, JavaScript String, JavaScript Boolean, JavaScript Undefined, JavaScript Null, JavaScript Symbol Categories: 学习 / JavaScript基础 在JavaScript中,数据类型用于表示不同种类的数据,例如数字、字符串、布尔值等。 JavaScript中的数据类型分为两大类:原始数据类型和对象数据类型。 ### 原始数据类型 原始数据类型的值只包含一个单独的内容(字符串、数字或者其他)。 ##### Number(数字) 用于表示数字,包括整数和浮点数。例如:5、3.14、-10。 数字可以有很多操作,比如,乘法 `*`、除法 `/`、加法 `+`、减法 `-` 等等。 除了常规的数字,还包括所谓的“特殊数值”也属于这种类型:`Infinity`、`-Infinity` 和 `NaN`。 `Number` 类型是浮点数类型,在进行精确计算时可能会存在精度问题,如:`0.1 + 0.2`。 可以通过 `parseInt()` 方法将字符串转换为整数,通过 `parseFloat()` 方法将字符串转换为浮点数。 示例: ```js let age = 25; ``` ```js console.log(0.1 + 0.2); // 输出 0.30000000000000004 ``` ```js let result = 0.1 * 10 + 0.2 * 10; result = result / 10; // 将结果转换回浮点数 console.log(result); // 输出 0.3 ``` ##### BigInt(大整型) 表示任意精度整数的数据类型(针对内存大小限制)。它允许你表示比 `Number` 类型更大范围的整数值,而不会丢失精度。使用 `n` 后缀或者调用 `BigInt()` 构造函数来创建 `BigInt`。 处理超出 `Number` 范围的整数值,不能与普通整数混合使用,不能通过 `parseInt()` 或 `parseFloat()` 转换。 示例: ```js let bigIntLiteral = 123n; let bigIntObject = BigInt(456); ``` ##### String(字符串) 用于表示文本数据,字符串是由一系列字符组成的,可以包含字母、数字、符号等,例如:"Hello, World!"、"你好"、'123'。 字符串必须被括在引号里,包括:单引号 `'Hello'`、双引号 `"Hello"`、反单引号 `` `Hello` ``。单引号和双引号都是“简单”引用,反单引号是具备功能扩展的引号,可以通过将 `${…}` 方式直接引用变量,保存文本格式。 换行符 `\n`、制表符 `\t`、反斜杠自身 `\\`、单引号 `\'` 和双引号 `\"`、回车符 `\r` 示例: ```js let text = "Hello, World!"; ``` ##### Boolean(布尔值) 用于表示逻辑值,只有两个可能的值:true 或 false。 示例: ```js let isStudent = true; ``` ##### Undefined(未定义) 用于表示未初始化、未定义、未被赋值的变量或没有参数值的函数。 示例: ```js let undefinedVar; alert(undefinedVar); ``` ##### Null(空值) 用于表示“无”、“空”或“值未知”的特殊值或不存在的对象值。 示例: ```js let nullValue = null; ``` ##### Symbol(符号) 用于创建唯一的、不可变的标识符。常用于定义对象的私有属性、创建唯一的常量或者作为特殊行为的标识符。每个通过Symbol创建的符号都是唯一的,即使它们具有相同的描述也是不同的。 示例: ```js const symbol1 = Symbol(); const symbol2 = Symbol(); console.log(symbol1 === symbol2); // 输出 false,每个Symbol都是唯一的 ``` *** ### 对象数据类型 可用于储存数据集合或更复杂的内容。 ##### Object(对象) 用于存储键值对,或者说属性与属性值的映射关系。 对象可以包含各种数据类型的值,包括数字、字符串、布尔值、数组、其他对象等。 示例: ```js let person = { name: "Alice", age: 30, isStudent: false }; ``` ##### Array(数组) 数组是一种有序的、可变的数据结构,用于存储一组值。数组可以包含不同数据类型的元素,且每个元素都有一个对应的索引。 示例: ```js let numbers = [1, 2, 3, 4, 5]; ``` ##### Function(函数) 函数是一种可重复使用的代码块,它可以接受输入参数、执行等一系列操作,并返回结果。函数是JavaScript中的一等公民,它可以被赋值给变量、作为参数传递给其他函数,也可以作为其他函数的返回值。 示例: ```js function greet(name) { console.log("Hello, " + name + "!"); } greet("JavaScript"); ``` *** ### `typeof` `typeof` 是一个在JavaScript中用于获取给定变量的类型的运算符(所以不需要在`typeof`中加括号)。它返回一个表示变量类型的字符串。 示例: ```js let undefinedVariable; let booleanVariable = true; let numberVariable = 42; let stringVariable = "Hello"; let objectVariable = { key: "value" }; let functionVariable = function() {}; let symbolVariable = Symbol("mySymbol"); let nullVariable = null; console.log(typeof undefinedVariable); // 输出 "undefined" console.log(typeof booleanVariable); // 输出 "boolean" console.log(typeof numberVariable); // 输出 "number" console.log(typeof stringVariable); // 输出 "string" console.log(typeof objectVariable); // 输出 "object" console.log(typeof functionVariable); // 输出 "function" console.log(typeof symbolVariable); // 输出 "symbol" console.log(typeof nullVariable); // 输出 "object" ``` 使用 `typeof x, x` 会分别返回变量类型及变量值。首先执行 `typeof x`,然后执行 `x`,并输出两个值。 示例: ```js let x = 42; console.log(typeof x, x); ``` - `typeof x` 返回 "number",表示变量 `x` 的类型是数字。 - `x` 返回变量 `x` 的值,即 `42`。 --- ## IT课程 JavaScript基础 037_字面量、变量、常量 URL: https://www.zhaojian.net/it-course-javascript-037/ Date: 2024-07-25 Tags: IT课程, HTML课程, CSS课程, JavaScript课程, Java课程, 计算机系统与网络, JavaScript字面量, JavaScript变量, JavaScript常量 Categories: 学习 / JavaScript基础 ### 字面量 字面量是直接出现在代码中的值,例如数字、字符串、布尔值等。 - **数字字面量:** 如 `5`, `3.14`。 - **字符串字面量:** 如 `'Hello, World!'`, `"JavaScript"`。 - **布尔字面量:** `true` 和 `false`。 - **对象字面量:** 如 `{ key: 'value', age: 25 }`。 - **数组字面量:** 如 `[1, 2, 3, 4]`。 示例: ```js // 数字字面量 var age = 18; // 字符串字面量 var name = "赵健"; // 布尔字面量 var isStudent = true; // 数组字面量 var numbers = [1, 2, 3]; // 对象字面量 var person = {name: "赵健", age: 18}; ``` ### 变量 变量是用来存储数据的容器,可以用来“存储”字面量,变量中存储的字面量可以随意修改,通过变量可以对字面量进行描述,并且变量比较方便修改。变量可以存储任何类型的值(实际上变量中并不存储任何值,而是存储值的内存地址),包括字面量、其他变量的返回值等。使用 var、let 关键字声明变量。 - `var` 关键字声明的变量是全局变量或函数作用域内的变量,可以重复声明 `var` 变量。 - `let` 关键字声明的变量是块作用域内的变量,不能重复声明 `let` 变量。 示例: ```js // 使用 var 声明(定义)变量 var age = 18; // 使用 let 声明(定义)变量 let name = "赵健"; // 先声明,后赋值 let name; name = "赵健"; //一行(次)声明多个变量 let age = 18, name = "赵健"; ``` ##### 变量命名 变量名是标识符的一种形式,变量名是用来标识存储数据的内存位置的名称。 标识符是用于命名变量、函数、类等的符号或名称。 **命名规则** - 变量名只能使用字母(含非英文字母)、数字、下划线 (`_`)、美元符号 (`$`) 。 - 变量名首字母不能是数字。 - 变量名不能包含空格或其他特殊符号。 - 变量名不能与 JavaScript 关键字相同。 **命名规范** - 驼峰命名法:第一个单词首字母小写,其他单词首字母大写。例如:`userName`、`firstName` - 帕斯卡(大驼峰)命名法:所有单词首字母大写。例如:`UserName`、`FirstName` - 下划线命名法:单词之间用下划线连接。例如:`user_name`、`first_name` 合规的变量名示例: ```js let userName; let hello123; let age; let $width; let _height; let 名字; ``` 不合规的变量名示例: ```js let 123abc; // 以数字开头 let user name; // 包含空格 let $#; // 包含特殊字符 let function; // 与 JavaScript 关键字相同 ``` ### 常量 常量是不能(或不想)被修改的值,常量可以使用 `const` 关键字声明,常量只能赋值一次,重复赋值会报错。推荐使用大写字母和下划线来命名这些常量。 示例: ```js // 使用 const 声明(定义)常量 const PI = 3.14; const COLOR_RED = "#F00"; // 尝试修改常量 PI = 3.15; // Uncaught TypeError: Assignment to constant variable. ``` --- ## VMware 官网免登陆下载地址 VMware Workstation Pro 下载地址 VMware Workstation Player 下载链接 URL: https://www.zhaojian.net/vmware-workstation-direct-download-address/ Date: 2024-07-07 Updated: 2026-01-30 Tags: VMware下载链接, VMware下载地址, VMware Workstation Pro 下载链接, VMware Workstation Pro 下载地址, VMware Fusion Pro 下载链接, VMware Fusion Pro 下载地址, VMware Workstation Player 下载链接, VMware Workstation Player 下载地址 Categories: 技术 >**2026-01-30 更新:** 之前的方法好像被博通发现了,现在博通删除了这个地址的部分服务,无法再通过这个方法下载VMware Workstation Pro了。但是我通过查找 互联网档案馆([https://web.archive.org/](https://web.archive.org/))发现,仍然可以通过 互联网档案馆 下载 VMware Workstation Pro 17.6.3 及之前的版本。但 VMware Workstation Pro 17.6.3 之后的下载方法,只能登录后下载了,不过现在 Workstation 和 Fusion 对个人使用完全免费,可以注册账号登录尝试一下。 VMware Workstation Pro 17.6.3 及之前版本下载地址: [https://web.archive.org/web/20250311044232/https://softwareupdate.vmware.com/cds/vmw-desktop/ws/](https://web.archive.org/web/20250311044232/https://softwareupdate.vmware.com/cds/vmw-desktop/ws/) --- VMware被博通斥巨资收购后,之前的永久授权模式被改为订阅模式,并且VMware Workstation Pro 16.2.3版本后,不再提供永久授权版本,只提供订阅版本。 在官网下载时需要登陆,之前还有跳过登录的链接,现在官网的链接已经无法实现免登陆下载了。 不过,可以通过下载升级包的方法,实现免登陆下载。唯一多了一个步骤,就是下载到本地后需要解压缩,下面是VMware官网的所有版本下载链接。 VMware 官网免登陆下载地址 VMware Workstation Pro 下载地址 VMware Workstation Player 下载链接,点击或复制到浏览器直接打开即可。 [https://softwareupdate.vmware.com/cds/vmw-desktop/](https://softwareupdate.vmware.com/cds/vmw-desktop/) ![示例效果](/uploads/2024/07/msedge_0704024.png) --- ## 免费无限制的全功能域名邮箱实现方案,cloudflare 电子邮件路由 Catch-all 功能收邮件+zoho企业邮箱发邮件 URL: https://www.zhaojian.net/free-domain-mail-solution-cloudflare-email-routing-catch-all-zoho-mail/ Date: 2024-06-27 Tags: 域名邮箱, 企业邮箱, 企业邮局, 免费邮箱, 免费邮局, 免费企业邮箱, 免费企业邮局, 免费域名邮箱, 免费域名邮局, 免费企业邮局, 免费企业邮局, cloudflare, cloudflare电子邮件, cloudflare电子邮件路由, cloudflare电子邮件路由catch-all, zoho, zoho邮箱, zoho邮局, zoho企业邮箱, zoho企业邮局 Categories: 技术 免费的域名邮箱或企业邮局不多了,仅存的几家功能也有限,刀法很精准,想解决痛点问题都要付费开通,一直使用 cloudflare 电子邮件路由,通过设置 Catch-all 地址 实现泛邮箱功能,可以让任意一个邮箱或不存在的邮箱地址收信并转发到指定邮箱接收。 但此方案只解决了收信问题,发信无法实现,虽然也可以通过Google或outlook实现代发,但实际效果跟常见的垃圾邮件伪造地址发信是一样的,大部分都会进垃圾箱或被拒收。 于是想到了一个比较奇葩的方案,可以实现自由收信、发信,通过设置MX的优先级,实现cloudflare优先收信,zoho不收信只发信,这样提供发信成功率,我测试的100%成功发信。 cloudflare DNS MX 设置如下: ![图1](/uploads/2024/06/msedge_0627019.png) cloudflare Catch-all设置如下: ![图1](/uploads/2024/06/msedge_0627021.png) zoho企业邮箱 DNS MX 设置如下: ![图1](/uploads/2024/06/msedge_0627022.png) --- ## 解决Brave浏览器翻译无法使用 无法翻译此网页 无法翻译整页内容 无法使用翻译成中文 翻译无法访问 URL: https://www.zhaojian.net/brave-browser-translation-cannot-be-used/ Date: 2024-03-14 Tags: brave, 浏览器, 翻译, brave翻译, brave翻译成中文, brave翻译整页内容, brave浏览器翻译, brave无法使用翻译, brave翻译无法访问, brave翻译无法使用, google翻译, 谷歌翻译, 谷歌翻译无法访问, 谷歌翻译无法使用, brave无法翻译此网页 Categories: 技术 >Brave是一个基于Chromium浏览器及其Blink排版引擎的自由及开放源代码的浏览器,由Mozilla项目的联合创始人、JavaScript的创造者布兰登·艾克与他人共同创建。它最初于2016年发布,旨在提供更快速、更私密、更安全的网络浏览体验。与其他主流浏览器相比,Brave有一些独特的特性和功能: > >**隐私保护**: Brave致力于保护用户的隐私。它默认启用了广告拦截器和跟踪器阻止功能,使用户能够更好地控制他们在网上的个人信息。 > >**广告替换**: Brave提供了一个名为Brave Rewards的功能,允许用户选择接收基于他们浏览习惯的隐私友好的广告,并获得BAT(Basic Attention Token)代币作为奖励。 > >**性能优化**: Brave通过加载页面时阻止大量的广告和跟踪器,提高了浏览速度。此外,它还采用了一种称为Brave Shields的功能,可以防止网站上的大部分第三方脚本加载,从而减少了页面加载时间。 最近在用Brave浏览器,发现Brave浏览器在中国的翻译功能无法使用,因翻译API接口地址无法访问,无法通过翻译此网页翻译整页内容。 选中内容可以翻译成中文 ![图1](/uploads/2024/03/brave_0314013.png) 但无法使用翻译整页内容,无法翻译此网页 ![图2](/uploads/2024/03/brave_0314012.png) 因为Brave也是一个基于Chromium的浏览器,首先想到会不会像谷歌浏览器(Chrome)一样,因为无法访问谷歌翻译导致的也无法访问Brave的翻译。使用了浏览器代理规则和修改hosts文件两种方案,均无法解决。 上网搜索,发现Brave的翻译竟然是与Lingvanex合作自建的,但我在Brave浏览器的github代码里的确看到有谷歌翻译API的地址:`translate.googleapis.com`,可能是我看的地方不对。 在整页翻译时抓包找到了Brave翻译的API接口地址为:`translate.brave.com`,再通过扫`translate.brave.com`获取到中国可以访问的IP地址 最终通过修改hosts文件的方法,使Brave浏览器的翻译功能恢复正常。 ![图3](/uploads/2024/03/brave_0314015.png) 方法: 以Windows系统为例,在 `C:\Windows\System32\drivers\etc\` 目录下,找到 host 文件,使用超级管理员权限编辑,在最下方添加下面的内容。 ```shell 172.65.248.248 translate.brave.com ``` 保存后即可在中国正常使用Brave浏览器的翻译功能。 如图所示: ![图4](/uploads/2024/03/Code_0314018.png) 如仍无法使用,可重启浏览器,或刷新DNS解析缓存试试。 方法: 打开Windows终端/CMD/PowerShell,执行以下命令。 ```shell ipconfig /flushdns ``` ---