工作环境迁移到 Debian
条评论引子
好久没在个人网站上写东西了,我都快成为成年老鸽了(笑),这次总算是在学期开始之际(假期里为啥不写呢)写点新东西。
这题目其实起得不太好,光看题目给人一种从 Windows 迁移到 Debian 的感觉。事实上是我(在半个月前)终于配好了台式机,工作环境就需要从原用 HP 笔记本上的 Ubuntu 迁移到台式机上了;另外一方面老友最近正好在忙着将工作环境从 Windows 迁移到 Ubuntu 上,想想这正好是一个总结一下工作环境配置的机会 —— 整理记录一下我的个人配置好让我以后迁移环境时有个参考;写点个人体会大概也能给初入 Linux 的用户提供一点小小的帮助。
系统选择
在此我当然是选择了 Debian,因为习惯了 deb 包体系的缘故(笑)。我用 Ubuntu 的一年多时间里还没有经历过大版本升级,所以我也不算是「深受 Ubuntu 其害」。Debian 官方源里的包比 Ubuntu 齐全很多,一般也认为比 Ubuntu 更加稳定,滚动升级的 testing 和 unstable 源也免去了大版本升级的麻烦(实用性强);另外官网也不再是 com 结尾而是 org 结尾了,支持硬件架构和内核之多也不愧为真正的「通用操作系统」(信仰足)。
至于源的选择方面,我倒是因为 testing 源内只有 firefox-esr 直接把源换成了 sid。另外并不建议直接安装 testing 源,推荐先安装 stable 源的镜像,装好驱动后再升级到 testing 或者 sid。实际使用下来也并没有什么问题,除了 apt 升级或者安装新包时不能再无脑回车了(依赖比 stable 源的软件肯定要复杂不少)。
源和包管理器(前端)
虽然说应该拥抱开源,出于性能等实际考虑闭源驱动还是要装的(当然也包括其他闭源的包),于是就需要在 /etc/apt/sources.list
末尾手动添加这一行(以 sid 为例):
1 | # 当然 http://cdn-fastly.deb.debian.org/debian 也可以 |
另外如果想临时安装其他源里的包,可以先修改 /etc/apt/sources.list
再使用 apt 的 -t
选项。在此以在 sid 上安装 stretch 的 ghc-mod 为例:
1 | sudo echo "deb http://deb.debian.org/debian stretch main contrib non-free" >> /etc/apt/sources.list |
如果是高版本添加低版本的源的话,source.list
不用改回去也没什么;反之还是在安装完后把添加的源注释掉吧,不然某次 apt upgrade
之后发现包的版本都不对了就不太好了。
至于版本升级的话,只需要改好源后 sudo apt update && sudo apt upgrade && sudo apt dist-upgrade
就可以了,还是挺方便的。
包管理器方面还是推荐一下 aptitude 吧,毕竟在解决依赖方面还是要比 apt 好很多了。另外推荐一个前端 apt-fast,它默认调用 aria2c 多线程下载软件二进制包。在此从 ppa 安装:
1 | sudo add-apt-repository ppa:apt-fast/stable |
安装完成后初次运行会弹出设置界面,之后就可以通过 aria2c 对软件包下载进行加速了。
硬件驱动
Debian 上面可没有 Ubuntu 那个方便的驱动管理器了,不过基本上主流硬件相关信息都可以在官方 wiki 上查到。驱动安装完成后可以通过 lsmod 命令查看加载的内核模块(驱动)。Nvidia 显卡方面我基本默认配置…… 能够正常运行吧,不过显卡高负载运行一晚上后稳定性还是稍微差了点。
Shell
zsh 和 oh-my-zsh 这一对老搭档。命令提示符主题我用了自定义的纯 ASCII 字符主题,连带 .zshrc 从笔记本上复制过来就可以用了。当初选 zsh 的一大原因是它和 bash 高度兼容,不过得把 unsetopt NOMATCH
这一行加入 ~/.zshrc
内才算是真的高度兼容。
编辑器
主力编辑器是 vim。值得一提的是 Debian 源内的「vim」是没有脚本语言支持的版本,「vim-nox」才是添加了 python3、perl、ruby 和 lua 支持的版本。拓展管理器方面我选择了 vim-plug,速度快依赖少也自带方便的命令。迁移的话复制一下 ~/.vimrc
再 :PlugInstall
一下就可以了。
桌面环境和终端模拟器
KDE 和 i3wm。使用平铺式窗口管理器时双手不用离开键盘,方向键切换窗口也更加快速(当然前提是键盘用起来足够顺手),不过有的 GUI 软件运行起来会出现一些缩放问题,于是再选择了长得好看的 KDE。i3wm 的终端模拟器选择了同属 LXQt 项目的 QTerminal。i3wm 的迁移只需要复制(数个)配置文件即可,KDE 记得有导入导出键盘快捷键配置的功能,不过并没有实际尝试过。
字体和输入法
Qt 这一套东西虽然长得挺好看的,不过中英文混排时有字体上下无法对齐的 bug,这个问题的解决办法可以参考这篇文章。Debian 源里没有 meslo 家族字体,得手动安装。个人自用的其他字体可以用以下命令安装:
1 | sudo apt install fonts-noto-cjk fonts-noto-cjk-extra # 标准显示用 CJK 字体,显示优先级在 ~/.fonts.conf 中定义 |
Emoji 方面我选择了 EmojiOne Color(主要还是因为 Google 的 Noto Color Emoji 越做越难看),需要另外手动安装。
编程字体和图标方面…… 我不太用那些有点花哨的图标(当然那些 Linux 发行版图标一点都不花哨)(另外很多图标源里也没有),如果有这方面的需要的话可以参考 nerd-fonts 或者另外自行安装。
至于字体渲染,Debian 上可以使用命令 sudo dpkg-reconfigure fontconfig-config
进行一定程度的配置。个人选择分别是「Native」、「None」、「Always」和「No」。
输入法也是个挺麻烦的问题,早前因为 ibus 的哪个记不起来的问题改用了 fcitx。在通过包管理器安装 fcitx、fcitx-rime 之后就可以通过 fcitx-config-gtk3 进行一定的配置了。如果希望拼音输入支持云联想的话可以另外安装 fcitx-libpinyin 和 fcitx-module-cloudpinyin 并使用 libpinyin 输入法(rime 暂不支持这个模块);日文输入法在此选择了 fcitx-anthy 这个包,韩文输入法没记错的话就只有 fcitx-hangul 可用了。接下来不要忘记在开机自启动项内添加 fcitx,KDE 下有 autostart 配置,i3wm 下直接在 ~/.config/i3/config
最后加入 exec --no-startup-id fcitx
即可。最后还需要修改环境变量以激活 fcitx 输入法,个人的做法是在 ~/.xprofile
和 ~/.xsession
这两个文件内同时加入以下内容:
1 | export XIM=fcitx |
浏览器
之前提到了最新版 firefox 只有在 sid 源内才有提供,于是可以选择按照官方教程从压缩包安装,也可以在 apt install
后面跟上 -t sid
(当然要先添加 sid 源了),或者直接升级到 sid 免除后续其他类似烦恼吧(笑)。firefox 中文支持需要另外安装 firefox-l10n-zh-cn。另外,Debian 源终于可以直接安装 chromium 而不需要写成 chromium-browser 了。
另外个人习惯是按下鼠标中键后上下移动滚屏(还是很早前在用 Windows 7 时养成的),firefox 默认关闭了这一功能,需要去 about:config
下修改 general.autoScroll
项以启用这一功能。
音乐播放
同样是老朋友 mpd,具体的配置可以见之前的文章和之前的文章。不过之前说到的前端 cantata 不同步问题其实是一个乌龙,是因为我没有把 cantata 设置成和后端同步。这方面还有一些小问题,之后(几年后)我可能会另外整理一篇发布。
SSH & GPG
SSH 方面复制粘贴 ~/.ssh/
下众文件即可,当然我也没有安装 sshfs 之类的功能增强软件。
GPG 方面 sid 源内的默认安装是 gpg2,可使用以下命令转移 gpg 私钥:
1 | gpg --list-secret-keys # 列出所有私钥 |
开发依赖
CUDA
Debian 源里直接有 CUDA,这方面看上去比 Ubuntu 方便了不少。如果从源安装的话在安装显卡驱动之后只需要安装 nvidia-cuda-dev 和 nvidia-cuda-toolkit 应该就可以了。不过问题是源里面只有 CUDA 8.0 和 CUDA 9.1/9.2,而最新版 tensorflow 预编译版只支持 CUDA 9.0。那么没有办法,在官网下载 CUDA 9.0 时注意只能选择 run 版的安装包,deb 版的会引入 Ubuntu 包名的依赖然后把依赖搞乱。如果已经事先安装了驱动的话就可以跳过安装驱动的步骤,直接安装 CUDA。安装完毕后不要忘记通过包管理器安装 libcuda1 这个包,不然还是无法成功使用 tensorflow。
nodejs
Debian 源里直接有 nodejs,不过版本相对来说比较低,也没有自带 npm(当然源里的 python 也没有自带 pip)。我没有做过测试,还是直接额外添加了 nodejs 10.x.x 的源从源安装。安装完毕之后可以再通过命令 sudo npm i -g n
安装 nodejs 的版本管理工具 n,或者通过命令 sudo npm i -g yarn
安装更好用的(但是会打小报告的)包管理器 yarn。
命令行软件
mutt
命令行邮件客户端,经久不衰。网上的教程大多是 mutt+(msmtpesmtp)+(getmailfetchmail)
的配置,不过为了减少依赖(以及人懒),我直接用了 mutt 近两年引入的内建 IMAP 客户端和 SMTP 客户端。迁移方面直接把 ~/.muttrc
和(可能使用的) ~/.mutt/*
复制粘贴一下就可以了;配置文件方面可以参考英文 ArchWiki 的这个页面;增强功能方面可以参考这篇文章。另外不熟悉 mutt 键位的用户可以在任何界面按下 ?
键获取当前界面键位的详细介绍。
weechat
我暂时只用 slack,那就装上这个外加 wee-slack 就可以方便地吹水了。当然命令行是没法显示图片啊文件啊代码片段的,还得用用浏览器啊。
ncmpcpp
配置文件位置在 ~/.ncmpcpp/config
。本体是用 C++ 写成的 mpd 命令行前端,算是经久不衰的软件了吧。
neofetch
命令行系统信息展示,替代 screenfetch,可以通过 stable(stretch)及之后的源直接安装。
htop & glances
两个命令行系统进程及性能监视器,替代系统自带的 top,前者会具体展示每个 CPU 核心的负载,后者会展示磁盘和网络负载。虽然说后者有点作为前者替代出场的意思,但是具体还是看个人偏好,当然两个都装也完全没问题。
nload & iftop
两个命令行网络监视器 —— 前者详细展示各网卡负载、网络流量及对应条形图;后者列出各进程网络使用情况,注意后者在 /usr/sbin
下,Debian 下需要 sudo 后才能识别。
ranger & rifle
命令行文件管理器搭档,无需详细配置即可使用,配置可继续参照英文 ArchWiki。
feh & zathura
这两个软件应该就不算传统意义上的命令行软件了:前者是简化的看图工具,后者是简化的 PDF 阅读器。另外前者也是 i3wm 下设置桌面背景的工具。
scrot
截屏软件,通过配置在 i3wm 下和 PrintScreen 键绑定。具体操作是在 ~/.config/i3/config
内插入 bindsym Print exec scrot ~/Pictures/Screenshot_%Y%m%d_%H%M%S.jpg -q 100
这一行,按住 $mod+Shift+r 原地重启 i3wm 就可以了。不过使用 scrot 生成的截图不包括鼠标,如果有这方面需求的话可以选择 spectacle 或者 gimp 之类的软件。
redshift
命令行版 f.lux,可纯手动控制,不过也有 gnome-shell-extension-redshift
和 plasma-applet-redshift-control
两个桌面环境集成组件。在终端内输入 redshift -O 4000
可以使输出色温降低到 4000K,redshift -x
可以使输出色温还原为默认。
图形界面软件
libreoffice
唔,主体没啥好说的,只是需要另外安装 libreoffice-gtk3
或者 libreoffice-kde5
等包才能让 fcitx 输入法、系统主题等等在 libreoffice 上正常工作。
krita
位图操作软件(望天),界面比 GIMP 看起来要现代多了,sid 源里也有,很方便就能拿来用了。具体我不是干这方面的,几年以后可能有什么心得吧(笑)。
typora
清爽风格 Markdown 编辑器,需要通过以下命令安装:
1 | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA300B7755AFCFAE |
没记错的话 Linux 下没有多少比较好看的(主打)Markdown 编辑器…… 唔,那就这个吧。
其他软件分发方式
传统包管理器之外主要就三种软件分发方式:AppImage、Snap 和 Flatpak。其中 Snap 和 Flatpak 都是在沙箱中运行的,Snap 由 Canonical 公司主导,Flatpak 由 RedHat 公司主导。两个平台上都有 Slack 客户端、Discord 客户端之类的软件,现在暂时没有多大区别,根据个人喜好安装即可。
尾声
嘛晚上写东西还是要准备点零食啊,其他暂时没有要补充的了,如果有的话还是留给下一篇吧(笑)。
另外这学期比上学期还要忙啊(望天),真不该去选什么绘图通识课的。