Android 游戏模拟器

手柄推荐

  • 盖世小鸡 G8 (红魔影刃2也是它贴牌的),闲鱼 280

PS5/PS4/PS3/Xbox

暂时没有能用的模拟器。

Switch 模拟器: Yuzu

开源:是

开发状态:活跃,几乎每天都在更新

游戏兼容性:

  • 绝大部分游戏能够运行,比如马里奥赛车8
  • 某些游戏需要调整配置或者打一些 MOD,比如塞尔达旷野之息
  • 某些游戏帧率比较低,卡顿,比如路易吉洋馆3

硬件需求:

  • 只支持高通骁龙系列处理器
  • 性能需要骁龙 865 或更强的处理器。如果要玩塞尔达旷野之息/王国之泪,则需要至少骁龙 8gen2
  • 建议 8 GB 以上的 RAM。如果要玩塞尔达旷野之息/王国之泪,则推荐 12GB 以上的 RAM

官方下载:

PS2 模拟器: AetherSX2

开源:否,源码已被删除

开发状态:已停止开发(2023年初)

游戏兼容性:

  • 大部分游戏能够运行,比如战神。

硬件需求:

  • 只支持高通骁龙系列处理器
  • 性能需要骁龙 865 或更强的处理器。如果要玩鬼武者3/战神,则需要至少骁龙 8gen2

官方下载:

Wii & GameCube 模拟器: Dolphin

开源:是

开发状态:活跃

游戏兼容性:

  • 大部分游戏能够运行,如马里奥赛车 Wii,大乱斗

硬件需求:

  • 64 位 4 核以上 ARM 处理器,比如骁龙 780,天玑 1200
  • 64 位 Android 8 或更新系统

官方下载:

3DS 模拟器:Citra

开源:是

开发状态:活跃

官方下载:

PSV 模拟器:Vita3K

开源:是

开发状态:活跃

游戏兼容性:大约有 50% 的游戏可玩

官方下载:

  • Google Play 上的是假冒的,不是官方,不推荐
  • F-Droid 上暂时没有
  • APK 下载

PS1/N64/MD/NDS/GBA/SNES/NES 等模拟器:RetroArch

开源:是

开发状态:活跃

核心推荐:

  • PS1 推荐 PCSX ReARMed 核心,不装 BIOS 的话有些游戏加载不出来,装 BIOS 绝大部分都能玩
  • N64 推荐 Mupen64Plus-Next 核心
  • 世嘉 MS/MD/CD/32X 推荐 PicoDrive,支持机种最全,游戏兼容性也最好
  • NDS 推荐 DeSmuME 核心
  • SNES 推荐 bsnes 核心,可以选 Accuracy (慢稳) 或 Performance (快不稳) 或 Balanced (平衡),绝大部分游戏应该都能玩
  • NES 推荐 Nestopia 核心,目前没有发现任何有问题的游戏,非常强

硬件需求:

  • 只要不是山寨机,应该都能流畅玩

官方下载:

中文乱码问题解决方案

批判一下红帽

最近开源社区最大的新闻就是红帽宣布 RHEL 不再公开源码,而是提供 CentOS Stream 的源码。而在此之前 CentOS 已经从 RHEL 的平替,变成了一个滑稽的滚动发行版。结果导致:

  1. 对很多资金紧张的企业来说,CentOS 不能用了;
  2. 基于 RHEL 源码的发行版,如甲骨文 Linux,亚马逊 Linux,Rocky Linux,在拿不到 RHEL 一比一源码的情况下,构建将更加困难;
  3. 开源社区对于红帽的信任危机,会影响红帽所主导的开源项目。

红帽是否背叛了开源?是否违反了 GPL?

CentOS Stream will now be the sole repository for public RHEL-related source code releases. For Red Hat customers and partners, source code will remain available via the Red Hat Customer Portal. …

… Red Hat customers and partners can access RHEL sources via the customer and partner portals, in accordance with their subscription agreement.

https://www.redhat.com/en/blog/furthering-evolution-centos-stream

根据红帽目前的说法,RHEL 的源码获取和使用的条件非常苛刻:

  1. 只有 RHEL 客户和合作伙伴才能获得 RHEL 的 1:1 源码;
  2. 客户和合作伙伴受到协议限制,不能再分发源码或重新构建 RHEL。(如果你做了,就停你许可协议)

第二条显然是律师设计的钻 GPL 空子的做法,但是法庭不一定会支持。就像老板说你今天可以不加班,但是明天我会辞退你,那么这家公司是否允许加班呢?是否违反劳动法呢?法律并不是玩文字游戏。

而第一条,虽然不违反 GPL,但是已经从字面上完全背离了 Open Source 的精神。

后续红帽又发文解释(同一个人,自称做开源十几年),但是这个解释更加令人失望。他似乎并没有意识到自己问题,反而认为是 Linux 社群的人不懂 GPL。让我们来看看他的惊人言论:

We will always send our code upstream and abide by the open source licenses our products use, which includes the GPL. …

I feel that much of the anger from our recent decision around the downstream sources comes from either those who do not want to pay for the time, effort and resources going into RHEL or those who want to repackage it for their own profit. This demand for RHEL code is disingenuous. …

https://www.redhat.com/en/blog/red-hats-commitment-open-source-response-gitcentosorg-changes

第一点,这个人一直在强调 RHEL 的代码会反馈给 Linux, GNU, GNOME 等上游项目,所以不需要向下游提供源码。但是你 RHEL 是作为一个完整的软件套件分发的,就需要同时分发其对应的源码给用户,并且不得限制用户修改/再分发源码。任何对 GPL 的掺杂附带条件的解释,都是对 GPL 的曲解和破坏。我很期待 RMS 来对红帽的观点进行点评。

第二点,这个人直接将下游利用 RHEL 代码的行为定性为自私自利。但是不要忘了,你红帽做出 RHEL 不也是靠利用上游代码?如果 Linux 和 GNU 都不提供给你源码,你不也一样赚不了钱?甚至红帽 2021 年退出了自由软件基金会,变成了利用 GNU 赚钱却不回馈 GNU。对于红帽的这种双重标准,我只能说是虚伪之极,无耻之极。

职业经理人正在毁掉一切

提到红帽,就不得不提 IBM。

  1. 2019 年,IBM 收购红帽。
  2. 2020 年,CentOS 卒,走得并不安详。
  3. 2023 年,RHEL 背叛开源。

如今的 IBM 已经是一家唯利是图的公司了,近些年几乎毫无创新。职业经理人掌控科技公司就会带来这种问题。而如今他们似乎也想给红帽杀鸡取卵。职业经理人们根本不懂开源,也不懂社区,甚至也不太懂企业客户。任何东西对他们来说都是工具,而他们只为股价和股东负责,为此他们很乐意牺牲任何工具,包括客户。

虽然红帽发文的人自称是资深工程师,但是我从他身上看不到一点开源精神或者社区精神。他更像是典型的大公司雇员,为公司的利益行动。从他的陈述,我们可以一窥红帽内部对于开源的态度。

如今有太多的公司怀着不单纯的目的参与开源。另一个例子是 Google 的 Android AOSP。以前你可以用 AOSP 源码构建一个全功能的移动操作系统。但是当 Android 已经统治了市场,Google 就开始将 AOSP 的功能砍掉,转移到它闭源的 Google Services 里。开源对他们来说只是一种便利的工具,只要符合资深利益,随时可以抛弃。

SUSE,甲骨文,C 社趁虚而入

红帽显然高估了自己对局面的掌控能力。其他厂商迅速做出了回应。

SUSE 宣布将投资 1000 万美元创建一个 RHEL 的开源硬分支。(目前的 openSUSE 和 SLE 发行版不会受到影响)SUSE 的系统和红帽具有很多相似性,比如都采用 RPM 打包格式,包管理器共用一部分代码,Open Build Service 也早就支持 CentOS 和 Fedora。估计创建一个 RHEL 分支并非难事。

甲骨文则是继续推销自家的 Linux,并为开源摇旗呐喊。了解甲骨文发家史的朋友看到这个标题,应该会觉得十分讽刺:Keep Linux Open and Free—We Can’t Afford Not To

C 社应该是最高兴的,Ubuntu 已经是市占率第一了,份额预计会进一步上升。在红帽的降智行为衬托直线,C 社的口碑甚至有所改善。它甚至什么都不用做就能从中受益,赢麻了。

显然,友商对红帽的行为都是不齿的。

一些前车之鉴

甲骨文收购 MySQL 后将其分成了开源的社区版和闭源的企业版。原 MySQL 创始人之一创建了硬分支 MariaDB 并迅速取代了 MySQL 在发行版中预装位置。曾经一度变成小众数据库的 Postgres 也逐渐流行起来。

Qt 公司宣布 Qt 6 将采用订阅模式,而非之前采用的买断模式。Reddit 上有很多企业版客户表示,会继续使用 Qt 5,不会升级 Qt 6。

MongoDB 直接从开源转为闭源,软件包从所有主流 Linux 发行版中被移出。大量客户改用同样支持 NoSQL 特性的 Postgres,或者用亚马逊闭源但免费的兼容数据库 DocumentDB。其 CEO 还丢下一句名言:

we didn’t open source it to get help from the community, to make the product better. We open sourced as a freemium strategy; to drive adoption.

我们的开源并不是为了获得帮助,使产品更好,而是作为免费增值策略,以推动采用。

ElasticSearch 从开源转为闭源,随后亚马逊硬分支了 OpenSearch。现在,OpenSearch 已经比 ElasticSearch 还要流行。

Node.js 曾经短暂出现一个 io.js 硬分支,以表达当时 Node.js 所属公司管理问题导致 Node.js 进展缓慢的不满。后来 Node.js 所属公司怂了,Node.js 改由基金会运营,才结束了分裂。

Switch游戏模拟指南

经过我个人测试,大部分 Switch 游戏都能在 PC 上流畅运行。偶有崩溃的情形,但是频率不高。

模拟器

目前最流行的是 yuzu 和 Ryujinx, 两者模拟效果差不多,yuzu 有中文翻译。我这里选了 yuzu。

硬件要求

  1. CPU:五年内的主流 x86_64 CPU 应该都没问题,推荐四核心以上。我用的 AMD 5600X。
  2. GPU:需要 GTX 1060 及以上水平的显卡才能流畅运行。我的 AMD RX 6700 可以跑两倍分辨率。
  3. 手机 SOC:Android 需要骁龙 8+ 以上的 SOC 才能流畅运行马里奥赛车之类的游戏。
  4. 手柄:通用的双摇杆手柄就行。

系统要求

目前仅支持 Windows, Linux 和 Android,苹果用户暂时没有办法玩了。

安装模拟器

官方下载连接

Linux 用户有几种选择:

  1. 从官网下载 AppImage 包 https://yuzu-emu.org/downloads/
  2. 从 Flathub 安装 https://flathub.org/apps/details/org.yuzu_emu.yuzu
  3. 在你发行版的 OBS, AUR, PPA 找一找有没有打包好的

安装好,运行应该是这样子的:

如果启动后界面是英文的,从菜单栏选择 Emulation –> Configure… –> General –> UI –> Interface language 修改成中文。

安装Switch系统固件(非必需)

部分游戏没有固件也能运行。但是安装固件可以让更多游戏能玩,减少一些游戏崩溃的概率。《塞尔达:王国之泪》需要 16.0.1 或更新的固件才能运行。

https://archive.org/download/nintendo-switch-global-firmwares

下载固件 zip,一般用最新的。解压后会得到几百个小文件。

打开 yuzu,通过菜单栏 文件 –> 打开 yuzu 文件夹,然后依次打开 nand –> system –> Contents –> registered 文件夹,将之前解压的所有小文件都复制到这里。

安装 prod.keys 和 title.keys

这两个是关键的密钥文件。去网上搜一搜就好了,这里就不提供下载了。

prod.keys 是必需的系统密钥,缺少了 prod.keys 密钥就玩不了游戏。prod.keys 和游戏无关,不管是新游戏还是老游戏,都不用更新 prod.keys。但是 prod.keys 和固件版本相关,比如 14.0 固件的 prod.keys 在 15.0 固件里就用不了。在网上搜索的时候,要带上固件版本号“prod.keys v16.0.0”。

title.keys 不是必需的,只有联机才需要。

打开 yuzu,通过菜单栏 文件 –> 打开 yuzu 文件夹,然后打开 keys 文件夹,将你找到的 prod.keys 和 title.keys 文件都复制到这里。

下载游戏 ROM

最常见的游戏 ROM 有 NSP 和 XCI 两种格式。yuzu 都能识别。下载完 ROM 之后,建议放到一个文件夹下面。

双击 yuzu 窗口中间,选择你的游戏文件夹,yuzu 会自动扫描文件夹里的游戏。

安装更新和 DLC

如果你还下载了游戏更新和 DLC(通常也是 NSP 和 XCI 格式),点击菜单栏的 文件 –> 安装到 NAND, 选择你的更新和 DLC 文件即可安装。

运行游戏

单击游戏即可运行。

差不多就是这样!

安装 MOD

Switch 性能比较差,像塞尔达这样的游戏,只能锁了 30 帧运行。但是在 PC 上模拟,硬件性能不再是问题。通过安装 60FPS 的 MOD, 我们可以玩到比 Switch 更流畅的体验。

首先打开官方 MOD 下载页面,搜索英文“Zelda”,找到对应的游戏。然后下载名为 60FPS 的 MOD。注意:尽量选择 MOD 支持的游戏版本,以免游戏崩溃。

下载完成后,解压文件,得到一个 60FPS 文件夹。

打开 yuzu,在游戏列表中找到塞尔达,右击,选“打开 MOD 数据位置”。

将之前解压得到的 60FPS 文件夹,复制到此处即可。

然后启动塞尔达,就能够以 60FPS 的流畅度玩了!如果有 3080 / 6900 这样的高端显卡,甚至可以2倍缩放画面,实现 4K@60FPS 的体验。

还有很多其他类型的 MOD, 大家可以自行探索。

Linux 科学上网指南:DNS

最近经常出现 Firefox 可以打开 GitHub 网站,但是命令行 Git 无法拉取/推送代码的情况。甚至开了 VPN 也不行。运行 ping 命令发现 github.com 被解析到了 127.0.0.1,这是 DNS 被劫持了。是谁搞的鬼,相信你一定懂得。

为啥 Firefox 可以打开 GitHub

最新的 Firefox 桌面版默认启用了 DoH(DNS over HTTPS),通过向特定的服务器发送 HTTPS 请求获取域名的 IP 地址。这就绕过了电信/联通/移动等提供的有毒 DNS 服务器。因为 DoH 采用 HTTPS 协议,不容易被劫持。另外国内用 Firefox 的很少,这个技术并不普及,所以暂时没有被老大哥盯上。

但是很可惜,DoH 目前无法在 Linux 系统层面支持,运行命令行仍然是使用 ISP 提供的 DNS 服务器。电信/联通/移动经常抽风,甚至某些路由器都会给你下毒,让你打不开网页或者直接跳到某网址导航。

为啥开了 VPN 也不行

因为通常是先连接本地网络,这时候已经从 ISP 获取了一个 DNS 服务器。再连接 VPN,(以 OpenVPN 为例)仍然是用的这个 DNS 服务器。

某些商业 VPN 客户端是会在连接上 VPN 之后自动更换 DNS 服务器的。但是 Linux 自带的网络管理是没这个能力的。

因此,如果你只用 Linux 自带的网络管理,最好的解决方法依然是手动设置一个可靠的 DNS 服务器。

DNS 服务器哪家强

如果你去网上搜,很多老的文章会推荐这两个:

  1. Google 的 8.8.8.8
  2. Cloudflare 的 1.1.1.1

这两个 DNS 还是能用的,但是在有些地方不太稳定,甚至直接连不上。

目前还是推荐国内正规企业提供的 DNS 服务器:

  1. DNSPod/腾讯云 119.29.29.29
  2. 阿里云 223.5.5.5

并不能保证腾讯和阿里的 DNS 百分之百可靠,但是比电信/联通/移动好太多。起码 GitHub 是可以正常解析的。

如何设置 DNS

这里就只介绍普通桌面用户用 NetworkManager 和 KDE 的用法。GNOME 基本类似。用 Wicked 的都是技术大佬,相信也不用看下面这些了。

  1. 从系统托盘网络图标右击,打开“网络设置”。
  2. 选择你的有线或者 WiFi 链接,进行编辑。
  3. 切换到 IPv4 标签页。
  4. 将“方法”从“自动”改成“自动(仅网络地址)”。
  5. 将“DNS服务器”改成“119.29.29.29”。
  6. 点“应用”并关闭“网络设置”窗口。
  7. 点击系统托盘的网络图标,打开网络列表,断开并重新链接。

注意,如果需要频繁更换不同的 WiFi 链接,则需要对不同的 WiFi 配置添加自己的 DNS 服务器。

如果是自己家的网络,可以在路由器上配置,方法和上面类似,都是配置 IPv4 方法和 DNS 服务器。(注意,路由器的 WAN 互联网和 LAN 局域网设置都要配一下)这样家里的设备就不用单独配置了。

清空 DNS 缓存

因为 DNS 记录是有本地缓存的,即使你更换了 DNS 服务器,依然会优先从缓存里取 IP 地址。所以更换 DNS 之后,需要清空 DNS 缓存。

这是一个比较头疼的问题,因为各家 Linux 发行版用来管理 DNS 的方式不一样,清空 DNS 缓存的方法也不一样。

最通用的方法:重启系统。

如果不想重启系统,那么可以参考这篇文章 https://www.techrepublic.com/article/how-to-flush-the-dns-cache-on-linux/

我大概总结一下,就是逐个试下面的命令:

sudo systemd-resolve --flush-caches
sudo systemctl restart nscd
sudo systemctl restart named

如果没有用的话,还是重启系统吧。

测试 DNS 解析

首先用 nslookup 测试一下 DNS 服务器是否能解析,如果解析出来的 Server 是你之前配的地址,Address 不是 127.0.0.1 或者 0.0.0.0 这种,应该就是好的。

$ nslookup github.com
Server:         119.29.29.29
Address:        119.29.29.29#53

Non-authoritative answer:
Name:   github.com
Address: 20.205.243.166

但是 nslookup 能解析,并不意味着就能连上。实际连接还要看 ping 命令。注意 github.com 并不回应 ping 请求,也就是数据包都会 lost,这是正常的。只要 ping 能解析到 IP 地址就行了。

$ ping github.com
PING github.com (20.205.243.166) 56(84) 字节的数据。
^C
--- github.com ping 统计 ---
已发送 3 个包, 已接收 0 个包, 100% packet loss, time 2049ms

如果 ping 没问题,最后再试一下 git pull 命令。如果不能访问,则需要试试 VPN 了。

GKD 350H 掌机的游戏移植

开源掌机可以理解为是带手柄按键和屏幕的嵌入式开发板,软件开发的方法都是一样的。移植游戏时,我们不止要保证能够编译通过,运行通过,还要让游戏适配掌机的分辨率,以及映射掌机的按键。

我玩过的第一台开源掌机是借的同学的 Gameshell,首发售价 1200 RMB。它很强大,用的是全志的 ARM 芯片,运行完整的 Debian 系统。因此可以直接 SSH 进去,安装需要的开发工具,直接编译和修改游戏即可,非常方便。

第二台开源掌机是我淘的二手 GKD 350H,全新的首发售价 399 RMB。这台掌机性能就弱很多了,用的是君正的 MIPS 芯片,运行特制的精简 Linux 系统。掌机本身的系统无法 SSH,无法安装开发工具链,性能也不支持它从事复杂编译。只能在电脑上用 buildroot 构建好开发工具链,然后交叉编译。

老张的 GKD 350H 和 GKD mini 用的相同的芯片和系统,理论上它们的构建工具和移植过的游戏也是通用的。不过我手头没有 GKD mini,不能保证兼容性。

周哥的 RG 350/351/280 系列,我手头没有设备,以后入手了可能会移植一下。

构建 Buildroot

GKD 350H 官方并没有开源系统,但是这块芯片很常见,所以 GitHub 出现了很多为 GKD 350H 或 GKD mini 定制的 buildroot。我用的是这个:

https://github.com/gameblabla/gkdmini_buildroot

首先你的电脑需要安装至少以下工具:

  • git
  • make
  • gcc
  • bc

我的电脑是 openSUSE Linux 系统,只要用包管理器安装即可。不太了解 Windows 和 macOS 要怎么安装。

然后,我们下载并构建 buildroot (国内同学建议全程开启 VPN,耗时较长,可以晚上睡觉前开始构建):

git clone git@github.com:gameblabla/gkdmini_buildroot.git
cd gkdmini_buildroot
make gkdmini_defconfig
make

构建完成之后,我们打开 output/host 这个目录,它就很像 GNU/Linux 发行版的目录结构。在 output/host/bin 目录下面,我们能够找到交叉编译所需要的工具链,比如 mipsel-linux-gcc。buildroot 推荐的使用方法是把 output/host/bin 添加到 $PATH 环境变量中:

# ~/.profile
export PATH=~/git/gkdmini_buildroot/output/host/bin:$PATH

在我们编译游戏的时候,要把工具链配置成 buildroot 提供的工具链路径。

移植 2048

2048 是当年在程序员之间很流行的小游戏。最初版本是网页游戏(JavaScript),Libretro 项目有一个 C 版本。它足够简单,依赖的库也少,所以我把它作为第一个练手项目。

make HOST=mipsel-linux CC=mipsel-linux-gcc CXX=mipsel-linux-g++ platform=linux

移植 Craft

Craft 是一个简化的 Minecraft 类沙盒游戏。我

Btrfs 断电损坏

强制关机是危险的,至少对于 Btrfs 文件系统来说。

即使如今 Linux 桌面的稳定性已经极大改善,使用滚动发行版或特殊显卡驱动的用户仍然可能会遇到系统卡死的情况。这时候很多人就会直接长按电源键关机。这会导致系统强制断电,而文件系统读写尚未完成(可能是文件系统层面,也可能是存储硬件层面)。

为什么偏偏 Btrfs 会特别敏感呢?

其实 Btrfs 本身并没有特别弱势的地方,但是使用 Btrfs 的发行版,比如 openSUSE,会定期进行 btrfs-balance 和 btrfs-cleaner。这些 Btrfs 维护任务会带来巨大的 CPU 和 IO 负担,让桌面更容易卡死崩溃。假如你正在玩一款特别占用资源的游戏,而这时 btrfs-balance 开始了,系统很可能会被卡死。如果此时强制断电,btrfs-balance 的数据转移就会被中断,从而使文件系统处于异常状态。

再次开机时,则可能会遇到无法挂载分区,无法进入系统,甚至无法启动的情况。通常系统的 /home 分区或子卷读写最频繁,也最容易因为断电而损坏。无法挂载 /home 分区或子卷的表现为:能进入登录界面却无法进入桌面。

这时要怎么做呢?

第一,重启后即使无法进入系统,也请先让机器继续运行。这可以让 SSD 硬件断电保护机制工作,将之前未完成的数据操作恢复,这可能需要几分钟。请尽量等待时间长一些,以确保数据写入已经完全完成。

第二,再次重启。如果第一步有效,那么您应该能够正常进入系统了。您可以多试几次。如果最终仍然不能进入系统,那么您还需要检查和修复 Btrfs 文件系统。

第三,制作救援盘,从救援盘启动。

第四,插入移动硬盘,使用 btrfs restore 将数据恢复出来。这一步是完全安全的,不会更改已有文件系统。接下来的步骤都或多或少有些风险,因此建议您先保留数据。

第五,按照维基上的 Btrfs 修复教程操作。需要注意的是,这些修复方法的风险依次增大。某些情况下,btrfs check --repair /dev/sda1 甚至可能会完全摧毁一个 Btrfs 文件系统。

Code Journey #11

九月亮点:高分屏BUG修复模拟器打包

KDE:

  • Kompare 高分屏渲染支持 [patch]
  • Filelight 高分屏渲染支持 [patch]
  • KSysGuard 系统卫士高分屏渲染支持,传感器折线图尚未支持 [patch]
  • 字体管理器高分屏渲染支持 [patch]
  • 字体管理器的 enablefont 和 disablefont 图标 [patch]
  • KWallet 钱包高分屏渲染支持 [patch]
  • KWin 高分屏渲染支持 [patch]
  • Krita 加载界面高分屏渲染支持 [patch]
  • Kate/KonsolePart 多屏渲染问题 [bug] [patch]
  • Spectale 多屏渲染问题 [bug] [patch]

openSUSE:

  • 更新 python-PyMuPDF 包并修复库链接问题
  • 更新 arcanist 包并提交到 Factory [request]
  • 提交 PCSX2 包到 Factory [request]
  • 更新 retroarch 包使之开箱即用 [request 1] [request 2]
  • 创建 retroarch-assets 包 [request]
  • 创建 retroarch-joypad-autoconfig 包 [request]
  • 创建 libretro-core-info 包 [request]
  • 创建 libretro-database 包 [request]
  • 创建 libretro-mame2000 核心包 [request]
  • 创建 libretro-genesis-plus-gx 核心包 [request]
  • 创建 libretro-flycast 核心包 [request]
  • 创建 libretro-yabause 核心包 [request]

Code Journey #10

KDE:

  • 修复 JuK 每次启动都弹出文件夹设置对话框的 BUG
  • 翻译 TechBase
  • 修复每日一图不更新的 BUG
  • 研究蓝牙耳机自动连接后无法识别的 BUG。确认是 Linux 内核的问题,已经汇报给上游。

openSUSE:

  • 更新维基 FAQ 页面,还在继续
  • Chameleon 主题:新的导航栏的页脚设计,以及暗色模式
  • 更新文档网页主题
  • 更新维基网页主题

openSUSE Conference 2019 @纽伦堡

openSUSE Conference 每年都有,以前总是因为各种要忙的没有下定决心去。这次提前安排了一下,公司还赞助了机票。

继续阅读 →

Code Journey #9