Thunderbolt 3 eGPU Bumblebee 方案尝鲜

最近从公司淘了一块 GTX 1060,淘宝了一个显卡盒折腾 TB3 eGPU 方案。由于笔记本经常带出门,打算采用即插即用的 bumblebee 方案(回家插上盒子用独显,拔下盒子可以带出门,可以正常待机不用重启)。下面记录一下 Arch 上配置的步骤和遇到的坑。

1、准备软件包

2、修改 bumblebee 配置

修改 /etc/bumblebee/xorg.conf.nvidia,在 Section “Device” 中加入:

修改 /etc/bumblebee/bumblebee.conf,在 [optirun] 中修改:

Continue reading Thunderbolt 3 eGPU Bumblebee 方案尝鲜

Arch Linux 社区中不成文的约定(一)

作为一个年轻和小众的社区(咳咳),Arch Linux 社区中有着许多不成文的约定。本文希望通过稍稍讲解一二,来消除一些新人们常常感到的困惑。由于预感到日后可能还会有更多问题,暂且认为这是系列里的第一篇 😛

  • 修理“坏”包和提醒更新

仓库里一般的包可能有一个或多个维护者,也可能没有维护者,成为“孤儿”。如果坏掉或者过期的包是一个孤儿,申请从仓库里删掉是更有效的方法,这样它可以在 AUR 找到新的主人。发邮件到 aur-general 解释一下情况,并表明自己或者别人想维护它,一般都会很快得到解决。

如果“坏”包有维护者,但他太忙了呢?这种情况下,这个包很可能已经在 Bug Tracker 里泥足深陷。这种时候可以通过帮维护者一个小忙的方式来促进问题的解决。如果有人找到了上游 Bug Report,并且上游已经修复提供了 patch 的话,可以考虑把 patch 贴到 Arch 的 Bug Tracker;如果这件事已经有人做了,可以修改 PKGBUILD 打上 patch,然后把改好的 PKGBUILD 贴上去;如果连 PKGBUILD 都有人准备好了,而且过去了一段时间的话,可以考虑把这份准备好的 srcpkg 或者 diff 直接发邮件给维护者,附上简短的感谢和一个笑脸 🙂

同样的道理,如果一个过期包已经被标记过期很久了,也可以准备一个新版的 PKGBUILD 发邮件给维护者。 Continue reading Arch Linux 社区中不成文的约定(一)

尝鲜可能比 sunpinyin 好一点的新拼音输入法

大概很多人还不知道,在老K同学偷偷默默开发了很久后,新一代的 fcitx5 已经“能用”了。不过因为还处在早期开发阶段,现在只有拼音输入法能用,而且输入界面极挫,没有配置界面和任何命令行帮助信息等。

先来一段 demo:

下面简单介绍一下 Arch 里的安装及配置方法:

首先从 AUR 中安装相关的软件包:

依赖中其他的相关包会被 yaourt 自动安装。如果你更喜欢手动安装,可以参考下面的顺序:

xcb-imdkit-git -> fcitx5-git -> libime-git -> fcitx5-chinese-addons-git -> fcitx5-gtk-git -> fcitx5-qt-git

注意原来的 fcitx 和这系列软件包冲突,可能会被提示卸载。 Continue reading 尝鲜可能比 sunpinyin 好一点的新拼音输入法

Arch Linux devtools 简介 – 在干净的环境里编译软件包

devtools 是 Arch Linux 开发者们用来往官方仓库里推进软件包使用的一系列工具。由于里面有许多工具可能不是我们常用的,这里主要介绍里面的一部分——用于在干净的环境中编译软件包的命令。

为什么要在干净的环境里编译软件包?这里有几个常见的理由:

  • 避免忘记写依赖 – 当前环境中已安装的软件包可能在普通的 makepkg 过程中被忽略,最后在 depends 或者 makedepends 等列表中缺失。
  • 避免编译过程污染环境 – 因为一些你可能没有想到的原因,编译过程中可能会对你当前的系统产生污染,比如跑 npm install 的时候可能会把缓存塞到 $HOME。
  • 避免因环境不干净导致的奇怪编译错误 – 你的环境中可能有各种不干净的情况,比如 profile.d 里覆盖了 gcc 等常见命令、/usr/local/bin 里有覆盖常用命令、用非系统包管理器安装(覆盖)了一些东西等。
  • 或者你只是不想把这个软件包编译时需要的一堆乱七八糟的依赖都装在自己机器上。

如果你有这样的需求,可以考虑使用 devtools。安装过程很简单

Continue reading Arch Linux devtools 简介 – 在干净的环境里编译软件包

给 Arch 打一个包 – Python 模块篇

这是一篇简化的教程,如果你有一个喜爱的 Python 模块不在 Arch 仓库里,AUR 里也没有,可以尝试读下去。

准备

对 Python 模块来说,一般仅仅一个 PKGBUILD 文件就足以完成所有的事情。现在你可以打开你最喜欢的文本编辑器,把下面这一个简单的 PKGBUILD 模板复制进去:

因为距离 Python 2 的废弃时间(2020年)还早,Arch 仓库中的 Python 模块包通常同时提供 Python 2/3 模块。上面例子里的 Python 软件包名叫 whatever,这也同样是它在 PyPI 中的名字。如果原来的包名中包含大写字母,在制作软件包时需要改成小写。 Continue reading 给 Arch 打一个包 – Python 模块篇

记一次磁盘数据损坏的修复过程

昨晚我大概没有把硬盘插紧,零点(一堆计划任务执行时)在 dmesg 里看到了大量 ext4/SATA 错误。今天开机时 BIOS 直接提示没有可引导的设备。下面记录了我所有的测试和恢复步骤:

  • 用备份盘开机,首先发现 /dev/sda 存在,但没有任何 /dev/sda*。判断是分区表损坏。
  • 执行 testdisk 快速扫描找回分区表,因为盘里只有一个分区,这一步很顺利。继续操作写回分区表。
  • 此时 /dev/sda1 已经出现,尝试 mount,失败。提示 ext4 没有 journal。
  • 执行 fsck.ext4 /dev/sda1,期间提示包括 root node 不是 directory 等一系列错误,一路 y 下去重建了 root node,并把一堆目录丢到了 /lost+found。
  • 重新 mount,成功挂载到 /mnt。
  • 进去查看,发现只有一个 ./lost+found。果然 / 目录里的信息丢失了。
  • 进入 ./lost+found,里面有二十来个目录。一个个进去查看。
  • 根据目录内容,将 home、var、usr、etc、srv、opt、root、boot 猜出来,并移动回对应的 /mnt/*。剩下的多是空目录,放弃。
  • 尝试 arch-chroot,失败,想起来还需要重建 / 里的一些 symlink 和空目录。
  • mkdir dev media mnt net proc run sys,然后创建 {s,}bin -> usr/bin,lib{,64} -> usr/lib 的 symlink。
  • 再次 arch-chroot,成功。
  • 执行 pacman -S filesystem 以防万一。
  • 运行 grub-install 恢复引导。
  • 运行 pacman -Qkq 比对文件,发现只有 visual-studio-code 包内容有丢失,暂时不管。
  • 重启,成功进入系统,重新安装 visual-studio-code。

至此,虚惊一场的数据丢失已经完全恢复,总共历时 1 个小时(前面大量的时间花在了让备份盘能启动起来,上一次备份出现了一点差错……)。

最后赞美一下坚强的 ext4!

Pacman Hooks 简介

Pacman 5.0 带来了 Hooks 支持,但在大规模应用前,我们留出了一个多月的时间来让用户先升级到 Pacman 5.0(因为同时升级 pacman 和有定义 hooks 的包会导致无法正常执行这些 hooks)。现在距离 Hooks 正式投入使用已经过去了一个月,我觉得是时候介绍一下 Hooks 和如何使用它了。

先来看一个简单的 Hook:

这个 Hook 的作用是:当检测到安装或更新的包文件中存在 usr/lib/tmpfiles.d/*.conf 时,在更新后对每个文件调用 systemd-tmpfiles --create 方法。前面的检测部分定义在 [Trigger] 部分,后面执行的操作定义在 [Action] 部分。下面我们分别了解一下这两部分。

一、[Trigger] 部分

首先需要了解的是可以用于触发的条件类别(Type)。上面的例子里使用了文件(File),即当操作中的包中存在对应文件时触发。另一个可选的 Type 是软件包名(Package),即直接匹配操作中的包名。

接下来,操作(Operation)选项限制了对软件包的操作类别。可以选择的操作有安装(Install)、更新(Upgrade)和删除(Remove)。一个 Hook 需要在多种操作执行时,如例子中那样写成多行即可。常用的组合有三种全部写上(更新缓存、数据库等)、写 Install+Upgrade(执行安装时的一次性操作)及与之对应的 Upgrade+Remove(卸载时的一次性操作)。

最后,我们需要定义具体的目标(Target)。如果目标是文件,这里需要写其相对根目录的完整路径,但需要去掉开头的 / 字符。通配符(*、?)可以使用,具体匹配时会使用 fnmatch 方法。同样的,在一个 Hook 中可以定义多个目标,类似例子中的 Operation 那样写成多行即可。
Continue reading Pacman Hooks 简介

Arch Linux [testing] 系列仓库简介

Arch Linux 中的 [testing]、[community-testing] 和 [multilib-testing] 三个仓库构成了 [testing] 系列仓库。由于网上许多地方对 [testing] 系列仓库存在一定的误解,我作为一只开发者,想藉此文介绍一下 [testing] 系列仓库。

一、[testing] 系列仓库里有哪些包?
主要有三类,按照数量排序应该是:由 soname 等 TODO 产生的大批完全未经测试的包;重要软件包、软件集合的更新、不靠谱上游推出的新版本、上游大版本更新等维护者虽然测试过但是不敢肯定没问题的包;因为维护者没有时间等情况而完全未经测试的包。注意,这里多数的情况都是完全未经测试的包,keep in mind。

二、什么情况下软件包会留在 [testing] 系列仓库里很长时间?
主要也有三类:没人测试给 signoff 的;已知有问题但还未修复或不知道怎么修复还在研究的;维护者明明拿到 signoff 了(针对目标仓库是 [core] 的情况)或明明不需要 signoff(针对所有除了 [core] 以外的仓库)但还是觉得没把握的。简单来说,一般情况下你想用的新版软件不会在 [testing] 系列仓库里停留超过一个星期,除非它已经被发现有问题了。

三、开 [testing] 系列仓库需要满足什么条件?

  • 对当前系统中所有重要资料的备份。因为你不知道你装的下一个未经充分测试的包里是否会出现类似之前 bumblebee 或 steam 那样的灾难性错误。
  • 有从包括 bumblebee 在内的各种灾难中恢复的能力。几乎没有人能帮你完成这件事,所以你需要自己拥有这种能力。这里包括的不止是对修复针对性问题所需要的知识和/或找到这些知识的能力,还包括提前准备好修复工作中需要的工具,比如 USB 安装介质和你的备份。
  • 能接受系统在一段时间内不可用。 如果你正在工作中赶进度,或者明天就需要在一场演讲中用到,这不是一个开启 [testing] 跑更新的很好时机。请保证你在满足前两个条件的情况下,还能接受你的系统需要一段时间才能修复这个事实。无论是找到问题、修复还是重装系统,还有从备份中 恢复文件,都是需要一定时间的。

最后,如果读到这里还没被我吓跑,欢迎你像我一样启用 [testing] 系列仓库,并把发现的问题报告到 Arch Linux Bug Tracker

搜狗拼音 for Linux 新版发布

官网地址:
http://pinyin.sogou.com/linux/

本猫折腾了一下, 做了一个 PKGBUILD, Hack 了一下 curl 版本的问题, 目前自己测试可以用哈~
snapshot66

坑爹之处在于, 这次放出的版本必须用内置的 qimpanel 界面! 也就是说, 经典 UI 和 kimpanel (包括 gnome-shell 那个 kimpanel 插件之类的) 都不能用, 否则你会看到一条超坑的提示:

“请启用fcitx-qimpanel面板程序,以便更好的享受搜狗输入法!”

做好的包和完整的 src 包下载: http://pkgbuild.com/~fyan/staging/fcitx-sogoupinyin/

PKGBUILD: (偷懒的猫只做了 x86_64 的)

其中那个 libcurl.so.4 是从一个很老版本的 curl 包里提出来的.

workaround curl 用的那个启动脚本:
/usr/bin/fcitx-qimpanel

使用方法:
重载 fcitx, 开启 qimpanel:

然后启动 fcitx-qimpanel:

然后切换到搜狗拼音输入法, 可以开始玩了!

Pipelight – 让 Linux 原生 Chromium/Chrome 无缝支持 ActiveX 控件 (看! 网银!)

工行网银, Silverlight, 支付宝控件, 放开那个 Windows 虚拟机, 让 Wine 上吧~

无图无真相:

2014-02-20-183618_1044x559

2014-02-20-183809_986x553

基本的原理是, 利用 Chrome 里已有的 npactivex (ActiveX for Chrome) 扩展, 配合 pipelight 提供的 npactivex NPAPI 插件, 将 ActiveX 控件本身用 wine 执行, 并且无缝地嵌入 Chrome 网页中.

因为此功能依然在活跃开发中 (今年 FOSDEM 2014 的一个碰撞产生的火花神马的), 稳定版本的 pipelight 暂时没有加入此功能. 大家如果想尝鲜的话, 我下面介绍一下 Arch Linux 里的安装测试方法 (暂时只针对 64 位测试用户哈):

2014/2/27 更新: 因为 pipelight 0.2.5 已经添加了 npactivex 插件, 不再需要手动安装 -git 的版本了.
1. 添加来自 pipelight 的第三方源到 /etc/pacman.conf:

2. 添加并授权 pipelight 开发者的软件包签名 PGP key:

3. 安装 pipelight:

4. 解锁 pipelight 的 npactivex 插件:

看到 "Plugin npactivex is now unlocked" 即为解锁成功.

5. 启用 npactivex 插件

看到 "Plugin npactivex is now enabled" 即为解锁成功.

6. 启动 chrome 浏览器,打开 chrome://plugins, 应该可以看到以下内容:

ActiveX hosting plugin for NPAPI
ActiveX hosting plugin for NPAPI r37
Name: ActiveX hosting plugin for NPAPI
Description: ActiveX hosting plugin for NPAPI r37
Version:
Location: /usr/lib/pipelight/libpipelight-npactivex.so
Type: NPAPI
Disable
MIME types:
MIME type Description File extensions
application/x-itst-activex ActiveX (*.ocx)
.ocx
application/activex-manager ActiveXManager

如果看到下列错误:

Pipelight Error (npactivex)!
Something went wrong, check the terminal output

请从终端打开 chromium/google-chrome, 观察终端出错日志.

7. 安装需要的 ActiveX 控件. 下面以工行控件为例:
7.1. 下载工行网银控件安装包:

7.2. 安装 mfc42 运行库:

7.3. 安装:

故障排除: 运行

如果输出包含以下内容就说明安装成功了, 否则说明以上某一步出错了

{93156467-FD99-4A30-9CA5-8563F4BB8DB3}|||icbc_netbank_client_controls

8. 安装 np-activex extension:
扩展可以从 Chrome Web Store 直接安装, 地址: https://chrome.google.com/webstore/detail/activex-for-chrome/lgllffgicojgllpmdbemgglaponefajn/related (打不开请翻墙哦 :D)

9. 设置 np-activex extension:
打开 chrome://chrome/extensions, 点击 "ActiveX for Chrome" 旁边的 "选项" (Options), 浏览到 "ICBC工商银行" 所在的条目, 将"已禁用"改为"已启用".

10. 用 Chrome 打开 https://mybank.icbc.com.cn/icbc/perbank/index.jsp 应该可以正常登陆工行网银了 😀

支付宝控件的安装过程基本一样 (注意不要漏掉设置 WINEPREFIX 哦), 不过在 npactivex extension 的设置界面并没有 Alipay 的选项. 分享一下我测试成功的规则哈:

Mode: WildChar
Pattern: https://*.alipay.com/*
User Agent: MSIE9
Other helper scripts: dynamic ieevent

最后, 感谢 Pipelight 项目. Pipelight 项目是两位德国的大学生发起的项目, 因最初目标是在浏览器里无缝支持 Silverlight 而得名. 如果你愿意表达对他们的感谢, 可以到以下链接为他们赠送 kudo:
https://www.ohloh.net/p/pipelight/contributors/3052248574201504
https://www.ohloh.net/p/pipelight/contributors/3052248574201570

感谢 npactivex 项目. npactivex 项目的开发者是 Chuan Qiu, 如果你愿意表达对他的感谢, 可以向他捐赠, 链接是 http://code.google.com/p/np-activex/wiki/Donations

感谢 Wine 项目以及 Wine 项目背后的CodeWeavers公司, 如果你愿意表达对他们的感谢, 可以购买商业版的 CrossOver 支持他们继续为 Wine 做出更多贡献: http://www.codeweavers.com/ 如果有足够多的用户要求, CrossOver 会集成 pipelight 解决方案, 方便更多 Linux 用户 :3

附安装 -git 版本的旧方法:
1. 安装源里的 mingw-w64 组, 全选安装

2. 安装 AUR/pipelight-git, 需要修改 PKGBUILD 的一些部分:
- 删除依赖 mingw-w32-bin
- 在 ./configure 这一行末尾添加 --win32-static

3. 完成安装, pipelight-git 的 wine-browser-installer 和 wine-silverlight 两个依赖也来自 AUR.