<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>NWMA_FYWF</title><description>blog</description><link>https://fuwari.vercel.app/</link><language>zh_CN</language><item><title>[指南] 在 Termux 中安装 OpenCode</title><link>https://fuwari.vercel.app/posts/%E6%8C%87%E5%8D%97-%E5%9C%A8-termux-%E4%B8%AD%E5%AE%89%E8%A3%85-opencode/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/%E6%8C%87%E5%8D%97-%E5%9C%A8-termux-%E4%B8%AD%E5%AE%89%E8%A3%85-opencode/</guid><description>在移动设备便捷使用 OpenCode 之方法</description><pubDate>Sat, 21 Feb 2026 06:04:00 GMT</pubDate><content:encoded>&lt;h2&gt;Termux 环境配置&lt;/h2&gt;
&lt;h3&gt;Termux 更新&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pkg upgrade 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;proot-distro 安装&lt;/h3&gt;
&lt;p&gt;由于 OpenCode 官方安装脚本针对标准 Linux 环境设计，我们需要通过 proot-distro 运行完整的 Debian 系统&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pkg install proot-distro 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看可用的发行版:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;proot-distro list 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出显示支持好多发行版，我选择 Debian (trixie) 以获得最佳的兼容性&lt;/p&gt;
&lt;h2&gt;部署 Debian 容器&lt;/h2&gt;
&lt;p&gt;下载并安装 rootfs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;proot-distro install debian 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;进入 Debian 环境&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;proot-distro login debian 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;成功进入后，提示符变为 &lt;code&gt;root@localhost:~#&lt;/code&gt;，此时我们已处于完整的 Debian trixie 环境中&lt;/p&gt;
&lt;h2&gt;OpenCode 安装&lt;/h2&gt;
&lt;p&gt;执行官方安装脚本:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://opencode.ai/install | bash 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完成后会显示 OpenCode 的 ASCII Logo&lt;/p&gt;
&lt;p&gt;官方提示说已自动添加 PATH，但实际测试发现需要手动 source:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 验证安装位置
find / -type f -name &quot;opencode&quot; 2&amp;gt;/dev/null 

# 输出为 /root/.opencode/bin/opencode 

&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;# 手动添加环境变量
echo &apos;export PATH=&quot;$HOME/.opencode/bin:$PATH&quot;&apos; &amp;gt;&amp;gt; ~/.bashrc 
source ~/.bashrc 
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;OpenCode 启动！&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;opencode 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不要忘记为你的项目初始化 OpenCode:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/init 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样我们就可以在 Termux 愉快的进行 Vibe Coding 了~&lt;/p&gt;
&lt;h2&gt;常见问题排查&lt;/h2&gt;
&lt;p&gt;若键入 opencode 后返回以下内容:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;opencode: command not found 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你应该检查 ~/.bashrc 中 PATH 配置，然后执行:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source ~/.bashrc 
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;参考链接&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Termux 官网：https://termux.dev&lt;/li&gt;
&lt;li&gt;Termux 仓库：https://github.com/termux/termux-app&lt;/li&gt;
&lt;li&gt;proot-distro 仓库：https://github.com/termux/proot-distro&lt;/li&gt;
&lt;li&gt;PRoot 维基：https://wiki.termux.com/wiki/PRoot&lt;/li&gt;
&lt;li&gt;OpenCode 官网：https://opencode.ai&lt;/li&gt;
&lt;li&gt;OpenCode 文档：https://opencode.ai/docs&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Fedora 43 下 HMCL 的安装指南</title><link>https://fuwari.vercel.app/posts/fedora-43-%E4%B8%8B-hmcl-%E7%9A%84%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/fedora-43-%E4%B8%8B-hmcl-%E7%9A%84%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/</guid><description>内有全面 Wayland 后的异常之一</description><pubDate>Sun, 15 Feb 2026 08:25:00 GMT</pubDate><content:encoded>&lt;p&gt;前一段在 Fedora 43 上尝试运行 HMCL 时遇到了一个问题。即明明已经安装了 OpenJDK，却提示缺少 JavaFX 组件。经过一番折腾，终于找到了解决方案，在此记录分享&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;问题现象&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;直接 &lt;code&gt;java -jar HMCL-3.7.5.jar&lt;/code&gt; 出现如下错误&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dev@192:~/.local/opt/hmcl$ java -jar HMCL-3.7.5.jar 
[09:47:11] [@.util.SelfDependencyPatcher.patch/INFO] Missing JavaFX dependencies, attempting to patch in missing classes
Exception in thread &quot;main&quot; java.awt.HeadlessException: 
No X11 DISPLAY variable was set,
or no headful library support was found,
but this program performed an operation which requires it.
	at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:158)
	at java.desktop/java.awt.Window.&amp;lt;init&amp;gt;(Window.java:518)
	at java.desktop/java.awt.Frame.&amp;lt;init&amp;gt;(Frame.java:428)
	at java.desktop/java.awt.Frame.&amp;lt;init&amp;gt;(Frame.java:393)
	at java.desktop/javax.swing.SwingUtilities$SharedOwnerFrame.&amp;lt;init&amp;gt;(SwingUtilities.java:1919)
	at java.desktop/javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1987)
	at java.desktop/javax.swing.JDialog.&amp;lt;init&amp;gt;(JDialog.java:276)
	at java.desktop/javax.swing.JDialog.&amp;lt;init&amp;gt;(JDialog.java:210)
	at java.desktop/javax.swing.JDialog.&amp;lt;init&amp;gt;(JDialog.java:158)
	at org.jackhuang.hmcl.util.SelfDependencyPatcher$ProgressFrame.&amp;lt;init&amp;gt;(SelfDependencyPatcher.java:396)
	at org.jackhuang.hmcl.util.SelfDependencyPatcher.fetchDependencies(SelfDependencyPatcher.java:277)
	at org.jackhuang.hmcl.util.SelfDependencyPatcher.patch(SelfDependencyPatcher.java:185)
	at org.jackhuang.hmcl.EntryPoint.checkJavaFX(EntryPoint.java:185)
	at org.jackhuang.hmcl.EntryPoint.main(EntryPoint.java:55)
	at org.jackhuang.hmcl.Main.main(Main.java:78)
^Cdev@192:~/.local/opt/hmcl$ 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个 &lt;code&gt;java.awt.HeadlessException&lt;/code&gt; 错误表明 Java 无法找到图形显示环境&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fedora 43 （已全面转向 Wayland），这个问题尤其突出（不再默认支持 &lt;code&gt;X11&lt;/code&gt;）&lt;/strong&gt;，因为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java AWT/Swing 在 Wayland 下支持不完善，需要强制使用 X11 后端&lt;/li&gt;
&lt;li&gt;自 Fedora  **Fedora 38 起，官方仓库不再提供 **&lt;code&gt;java-\*-openjdk-javafx&lt;/code&gt; 包（OpenJDK 已剥离 JavaFX），导致 HMCL 无法自动获取 JavaFX 依赖&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正确解决方案：手动提供 JavaFX 并启用 X11 兼容&lt;/p&gt;
&lt;p&gt;由于系统无法通过 dnf 安装 JavaFX，你需要 &lt;strong&gt;手动下载 JavaFX SDK&lt;/strong&gt; 并运行 HMCL 时显式指定模块路径&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;解决方案&lt;/h2&gt;
&lt;h3&gt;1. 下载 &lt;code&gt;JavaFX for Linux (x64)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;访问 GluonHQ 官网 (https://gluonhq.com/products/javafx/) 下载适合 Linux x64 的 JavaFX SDK。 或者使用命令行：&lt;/p&gt;
&lt;p&gt;下载后解压，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~/Downloads
wget https://download2.gluonhq.com/openjfx/21.0.2/openjfx-21.0.2_linux-x64_bin-sdk.zip
unzip openjfx-21.0.2_linux-x64_bin-sdk.zip
mv javafx-sdk-21.0.2 ~/javafx-sdk
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 在 Wayland 下启用 &lt;code&gt;X11&lt;/code&gt;兼容&lt;/h3&gt;
&lt;p&gt;虽然 GNOME 默认用 Wayland，但 &lt;strong&gt;&lt;code&gt;Java AWT/Swing&lt;/code&gt; 在 &lt;code&gt;Wayland&lt;/code&gt; 下支持不完整&lt;/strong&gt;，建议强制使用 &lt;code&gt;X11&lt;/code&gt; 后端：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export GDK_BACKEND=x11
export _JAVA_AWT_WM_NONREPARENTING=1  # 避免窗口管理器问题（可选）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. 使用 JavaFX 模块运行 HMCL&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd ~/xxx # 进入 HMCL-3.7.5.jar 所在的目录
java \
  --module-path ~/javafx-sdk/lib \
  --add-modules javafx.controls,javafx.fxml,javafx.swing,javafx.media \
  -jar HMCL-3.7.5.jar
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. 结束了？&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;dev@192:~/.local/opt/hmcl$ java --module-path ~/javafx-sdk/lib --add-modules javafx.controls,javafx.fxml,javafx.swing,javafx.media -jar HMCL-3.7.5.jar 
[10:03:10] [@.Launcher.main/INFO] *** HMCL 3.7.5 ***
[10:03:10] [@.Launcher.main/INFO] Operating System: Fedora Linux 43 (Workstation Edition) (Linux 6.17.8-300.fc43.x86_64)
[10:03:10] [@.Launcher.main/INFO] System Architecture: x86-64
[10:03:10] [@.Launcher.main/INFO] Native Encoding: UTF-8
[10:03:10] [@.Launcher.main/INFO] JNU Encoding: UTF-8
[10:03:10] [@.Launcher.main/INFO] Java Architecture: x86-64
[10:03:10] [@.Launcher.main/INFO] Java Version: 25.0.1, Red Hat, Inc.
[10:03:10] [@.Launcher.main/INFO] Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Red Hat, Inc.
[10:03:10] [@.Launcher.main/INFO] Java Home: /usr/lib/jvm/java-25-openjdk
[10:03:10] [@.Launcher.main/INFO] Current Directory: /home/dev/.local/opt/hmcl
[10:03:10] [@.Launcher.main/INFO] HMCL Global Directory: /home/dev/.local/share/hmcl
[10:03:10] [@.Launcher.main/INFO] HMCL Current Directory: /home/dev/.local/opt/hmcl/.hmcl
[10:03:10] [@.Launcher.main/INFO] HMCL Jar Path: /home/dev/.local/opt/hmcl/HMCL-3.7.5.jar
[10:03:10] [@.Launcher.main/INFO] HMCL Log File: /home/dev/.local/opt/hmcl/.hmcl/logs/2025-11-22T10-03-10.log
[10:03:10] [@.Launcher.main/INFO] JVM Max Memory: 4480 MiB
[10:03:10] [@.Launcher.main/INFO] Metaspace: 3.89 MiB
[10:03:10] [@.Launcher.main/INFO] Native Backend: None
[10:03:10] [@.Launcher.main/INFO] XDG Session Type: wayland
[10:03:10] [@.Launcher.main/INFO] XDG Current Desktop: GNOME
[10:03:10] [@.util.platform.SystemInfo.initialize/INFO] System Info:

 - CPU: AMD Ryzen 5 3400G (4 Cores / 8 Threads)
 - GPU: AMD Radeon Vega 11 Graphics [Integrated]
 - Memory: 3.46 GiB / 17.5 GiB (19%)
   [10:03:11] [@.Launcher.start/INFO] JavaFX Version: 21.0.2+5
   [10:03:11] [@.Launcher.start/INFO] Prism Pipeline: com.sun.prism.es2.ES2Pipeline
   [10:03:11] [@.Launcher.start/INFO] Dark Mode: false
   [10:03:11] [@.Launcher.start/INFO] Reduced Motion: false
   [10:03:11] [@.setting.ConfigHolder.init/INFO] Config location: /home/dev/.local/opt/hmcl/.hmcl/hmcl.json
   [10:03:11] [@.setting.ConfigHolder.loadGlobalConfig/INFO] Creating an empty global config
   [10:03:11] [@.setting.ConfigHolder.init/INFO] Creating config file /home/dev/.local/opt/hmcl/.hmcl/hmcl.json
   [10:03:11] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$19/TRACE] Executing task: org.jackhuang.hmcl.game.GameRepository.refreshVersionsAsync(GameRepository.java:91)
   [10:03:11] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$19/TRACE] Executing task: org.jackhuang.hmcl.game.GameRepository.refreshVersionsAsync(GameRepository.java:91)
   [10:03:11] [@.event.EventBus.fireEvent/INFO] RefreshingVersionsEvent [source=HMCLGameRepository [versions=null, baseDirectory=.minecraft]] gets fired
   [10:03:11] [@.event.EventBus.fireEvent/INFO] RefreshingVersionsEvent [source=HMCLGameRepository [versions=null, baseDirectory=.minecraft]] gets fired
   [10:03:11] [@.event.EventBus.fireEvent/INFO] RefreshedVersionsEvent [source=HMCLGameRepository [versions=[], baseDirectory=.minecraft]] gets fired
   [10:03:11] [@.event.EventBus.fireEvent/INFO] RefreshedVersionsEvent [source=HMCLGameRepository [versions=[], baseDirectory=.minecraft]] gets fired
   [10:03:11] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$29/TRACE] Task finished: org.jackhuang.hmcl.game.GameRepository.refreshVersionsAsync(GameRepository.java:91)
   [10:03:11] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$29/TRACE] Task finished: org.jackhuang.hmcl.game.GameRepository.refreshVersionsAsync(GameRepository.java:91)
   [10:03:11] [@.ui.Controllers.initialize/INFO] Start initializing application
   [10:03:11] [@.util.FileSaver.saveSync/INFO] Saving file /home/dev/.local/opt/hmcl/.hmcl/hmcl.json
   [10:03:11] [@.java.JavaManager.searchPotentialJavaExecutables/TRACE] Finished Java lookup, found 1
 - JRE 25.0.1 (x86-64, Red Hat, Inc.): /usr/lib/jvm/java-25-openjdk/bin/java
   [10:03:11] [@.setting.FontManager.findByFcMatch/INFO] Load font file: /usr/share/fonts/google-noto-sans-cjk-vf-fonts/NotoSansCJK-VF.ttc
   [10:03:12] [@.setting.FontManager.&amp;lt;clinit&amp;gt;/INFO] Font: Noto Sans CJK SC
   [10:03:12] [@.auth.authlibinjector.AuthlibInjectorServer.refreshMetadata/INFO] authlib-injector server metadata refreshed: https://littleskin.cn/api/yggdrasil/
   [10:03:12] [@.ui.construct.JFXDialogPane.push/INFO] JFXDialogPane@7f64efdf [JFXDialogLayout@1db3cfeb[styleClass=jfx-dialog-layout]]
   [10:03:12] [@.util.FileSaver.saveSync/INFO] Saving file /home/dev/.local/opt/hmcl/.hmcl/hmcl.json
   [10:03:12] [@.upgrade.IntegrityChecker.isSelfVerified/INFO] Successfully verified current JAR
   [10:03:13] [@.upgrade.UpdateChecker.lambda$requestCheckUpdate$2/INFO] Latest version (STABLE, preview=false) is [3.7.5 from http://mirrors.cloud.tencent.com/nexus/repository/maven-public/org/glavo/hmcl/hmcl-stable/3.7.5/hmcl-stable-3.7.5.jar]
   [10:03:14] [@.util.FileSaver.saveSync/INFO] Saving file /home/dev/.local/share/hmcl/config.json
   [10:03:14] [@.ui.construct.JFXDialogPane.pop/INFO] JFXDialogPane@7f64efdf [], removed: true, object: JFXDialogLayout@1db3cfeb[styleClass=jfx-dialog-layout]
   [10:03:22] [@.Launcher.stopApplication/INFO] Stopping application.
   at java.base/java.lang.Thread.getStackTrace(Thread.java:2193)
   at org.jackhuang.hmcl.Launcher.stopApplication(Launcher.java:286)
   at org.jackhuang.hmcl.ui.decorator.DecoratorController.lambda$new$1(DecoratorController.java:108)
   at org.jackhuang.hmcl.ui.decorator.Decorator.close(Decorator.java:302)
   at org.jackhuang.hmcl.ui.decorator.DecoratorSkin.lambda$new$7(DecoratorSkin.java:248)
   at javafx.base@21.0.2/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
   at javafx.base@21.0.2/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
   at javafx.base@21.0.2/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
   at javafx.base@21.0.2/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
   at javafx.base@21.0.2/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
   at javafx.base@21.0.2/javafx.event.Event.fireEvent(Event.java:198)
   at javafx.graphics@21.0.2/javafx.scene.Node.fireEvent(Node.java:8875)
   at javafx.controls@21.0.2/javafx.scene.control.Button.fire(Button.java:203)
   at javafx.controls@21.0.2/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:207)
   at javafx.controls@21.0.2/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
   at javafx.base@21.0.2/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
   at javafx.base@21.0.2/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
   at javafx.base@21.0.2/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
   at javafx.base@21.0.2/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
   at javafx.base@21.0.2/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
   at javafx.base@21.0.2/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
   at javafx.base@21.0.2/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
   at javafx.base@21.0.2/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
   at javafx.base@21.0.2/javafx.event.Event.fireEvent(Event.java:198)
   at javafx.graphics@21.0.2/javafx.scene.Scene$MouseHandler.process(Scene.java:3984)
   at javafx.graphics@21.0.2/javafx.scene.Scene.processMouseEvent(Scene.java:1890)
   at javafx.graphics@21.0.2/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2708)
   at javafx.graphics@21.0.2/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
   at javafx.graphics@21.0.2/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
   at java.base/java.security.AccessController.doPrivileged(AccessController.java:138)
   at javafx.graphics@21.0.2/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
   at javafx.graphics@21.0.2/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
   at javafx.graphics@21.0.2/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
   at javafx.graphics@21.0.2/com.sun.glass.ui.View.handleMouseEvent(View.java:551)
   at javafx.graphics@21.0.2/com.sun.glass.ui.View.notifyMouse(View.java:937)
   at javafx.graphics@21.0.2/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
   at javafx.graphics@21.0.2/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$10(GtkApplication.java:263)
   at java.base/java.lang.Thread.run(Thread.java:1474)

[10:03:22] [@.task.Schedulers.shutdown/INFO] Shutting down executor services.
[10:03:22] [@.util.FileSaver.saveSync/INFO] Saving file /home/dev/.local/opt/hmcl/.hmcl/hmcl.json
dev@192:~/.local/opt/hmcl$ 
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;最后优化&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;每次输入长串命令很麻烦，可以写一个脚本&lt;/p&gt;
&lt;h3&gt;1. 将 HMCL.jar 放置于 /home/dev/.local/opt/hmcl/&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mkdir /home/dev/.local/opt/hmcl/
cd /home/dev/.local/opt/hmcl/ # 这里 dev 字样换成你的用户名 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 编写启动脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;vim run.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;run.sh:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
cd &quot;$(dirname &quot;$0&quot;)&quot;
export GDK_BACKEND=x11
java \
  --module-path &quot;$HOME/javafx-sdk/lib&quot; \
  --add-modules javafx.controls,javafx.fxml,javafx.swing,javafx.media \
  -jar HMCL-3.7.5.jar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;赋予执行权限：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod +x run.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. 创建桌面快捷方式&lt;/h3&gt;
&lt;p&gt;如果想从应用菜单启动，可以创建 .desktop 文件&lt;/p&gt;
&lt;p&gt;图标可以直接下载官方仓库里的
https://github.com/HMCL-dev/HMCL/blob/main/HMCL/src/main/resources/assets/img/icon%408x.png&lt;/p&gt;
&lt;p&gt;如果访问失败可以用我上传的蓝奏云 (图像来源即上述仓库)
https://wwaoe.lanzoue.com/iTqn13ijfbre
密码:8smb&lt;/p&gt;
&lt;p&gt;我们开始&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~.local/share/applications/
vim hmcl.desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;hmcl.desktop:&lt;/p&gt;
&lt;p&gt;填入以下内容（请将 Exec 和 Icon 路径替换为实际位置）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Desktop Entry]
Version=1.0
Type=Application
Name=HMCL
Comment=HMCL
Exec=/home/dev/.local/opt/hmcl/run.sh
Icon=/home/dev/.local/opt/hmcl/hmcl.png
Terminal=false
StartupNotify=true
Categories=Games;Minecraft;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. 更新桌面数据库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;update-desktop-database ~/.local/share/applications
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;&lt;strong&gt;结束了，再一次&lt;/strong&gt;&lt;/h2&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>解决 Edge 锁配置文件故障 - 移除 SingletonLock</title><link>https://fuwari.vercel.app/posts/%E8%A7%A3%E5%86%B3-edge-%E9%94%81%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%95%85%E9%9A%9C---%E7%A7%BB%E9%99%A4-singletonlock/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/%E8%A7%A3%E5%86%B3-edge-%E9%94%81%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%95%85%E9%9A%9C---%E7%A7%BB%E9%99%A4-singletonlock/</guid><description>锁文件故障修复之方法</description><pubDate>Sat, 15 Nov 2025 00:21:00 GMT</pubDate><content:encoded>&lt;h2&gt;问题现象&lt;/h2&gt;
&lt;p&gt;在 Fedora 43 GNOME 49 环境下执行 microsoft-edge-stable 启动失败，报错：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;XX@XX:~$ microsoft-edge-stable 
[6854:6854:1115/074247.625820:ERROR:chrome/browser/process_singleton_posix.cc:364] 另一计算机(10262)上的另一 Microsoft Edge 进程(192.168.XXX.XX)似乎正在使用此用户配置。Microsoft Edge 已锁定此用户配置以防止损坏。如果你确定没有其他进程正在使用此用户配置，可以将其解锁并重新启动 Microsoft Edge。
[6854:6854:1115/074247.625957:ERROR:chrome/browser/ui/views/message_box_dialog.cc:200] Unable to show message box: Microsoft Edge - 另一计算机(10262)上的另一 Microsoft Edge 进程(192.168.XXX.XX)似乎正在使用此用户配置。Microsoft Edge 已锁定此用户配置以防止损坏。如果你确定没有其他进程正在使用此用户配置，可以将其解锁并重新启动 Microsoft Edge。
XX@XX:~$ 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;该提示具有误导性——实际无其他设备在用，仅因进程异常退出导致锁文件残留。&lt;/p&gt;
&lt;h2&gt;解决步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;终止残留进程 （确保无后台运行）：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;pkill -f microsoft-edge-stable
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;删除锁文件 （关键操作）：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;rm -f ~/.config/microsoft-edge/SingletonLock ~/.config/microsoft-edge/SingletonSocket
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;根本原因&lt;/h2&gt;
&lt;p&gt;&lt;s&gt;Microsoft Edge 使用 SingletonLock 和 SingletonSocket 文件实现单实例保护。若进程非正常退出（如崩溃、SSH断开、系统重启），这些文件不会被清除，下次启动即误判为“多机并发”，强制锁定配置目录。&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;简单的总结就是进程异常残留的本地文件锁问题 ~&lt;/p&gt;
</content:encoded></item><item><title>解决在 Hyprland 下 Dolphin 默认打开方式无效的问题</title><link>https://fuwari.vercel.app/posts/%E8%A7%A3%E5%86%B3%E5%9C%A8-hyprland-%E4%B8%8B-dolphin-%E9%BB%98%E8%AE%A4%E6%89%93%E5%BC%80%E6%96%B9%E5%BC%8F%E6%97%A0%E6%95%88%E7%9A%84%E9%97%AE%E9%A2%98/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/%E8%A7%A3%E5%86%B3%E5%9C%A8-hyprland-%E4%B8%8B-dolphin-%E9%BB%98%E8%AE%A4%E6%89%93%E5%BC%80%E6%96%B9%E5%BC%8F%E6%97%A0%E6%95%88%E7%9A%84%E9%97%AE%E9%A2%98/</guid><description>这里是 Dolphin 默认打开方式无效的众多原因之一之解决方法</description><pubDate>Sat, 27 Jul 2024 13:25:00 GMT</pubDate><content:encoded>&lt;h2&gt;解决方法:&lt;/h2&gt;
&lt;p&gt;安装 kde-cli-tools 包&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S kde-cli-tools 
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;https://archlinux.org/packages/extra/x86_64/kde-cli-tools/
https://github.com/KDE/kde-cli-tools
https://invent.kde.org/plasma/kde-cli-tools&lt;/p&gt;
</content:encoded></item></channel></rss>