最近一年发现重装机器系统的频率有点高,在最近在公司又重新装了一次之后,终于痛下决心打算记录下配置的踩坑经验。

本人是在实习的时候,后端当时全员 Linux Desktop,装了 Ubuntu 16.04 之后,一直稳定工作了大半年,算是初入 Linux,当时 Ubuntu 的稳定给本人留下极深的印象。回想起来倒不是觉得他们有极客精神,而是因为穷 QAQ,没有钱支撑全员 Mac。

首先先解释为啥要 Linux Desktop,撇开开源精神之类这些意识形态的东西,个人觉得最大的好处就是对比其他系统,Linux 硬件要求最低运行效率最高,还有不用考虑任何有关乱码或者 docker 这些形形色色的坑。

发行版选择

再解释为啥是 Ubuntu,而不是 Arch 等其他发行版。

闲着无聊的时候,把大一开学买的神船把流行的发行版都折腾了一遍,Arch 当时给本人留下了不少的阴影就是容易挂滚,频率且挺高。而且个人很不喜欢这个发行版的粉丝,堪称邪教,暗搓搓的优越感让本人很不适,不知道为啥玩个发行版还会有鄙视链,这种东西是开发内核么还是有啥高技术含量的操作?Arch 教众言必称 AUR,KISS,滚动发行、时刻最新,虽然牛逼得不行,但是事实上没人会在公司里用 Arch 跑服务。有一说一,Arch wiki 确实可以看看,Arch 教徒里吹 wiki 这一点上算是没得黑的。
image.png

个人是 Debian 粉。毕业前某个周末快速看了一遍 Debian wiki 之后心里有种感觉,就是它了。个人是比较喜欢线上 Debian 的系统,本地 Ubuntu 的开发机器。Debian 系的发行版很稳定,且内核版本都很新。论真 · 开源精神 Debian 最纯正,坚持 GNU,没有商业公司驱动,都是社区用爱发电,且社区不弱于商业公司。Arch 粉丝大多数黑 Debian 本身不好用,没人黑过 Debian 的通用性和社区,Debian 支持最多的架构,不管是树莓派这种板子,还是路由器,x86 服务器,还是消费级笔记本。可以仔细观察下 github 上开源的软件或者普通的商业软件 Linux 客户端这块基本都有 deb 包。选择了 Debian,就选择了最广大的社区。还有可以仔细观察下每年各种 Linux 杂七杂八的榜单,看一下 Debian 系的发行版占了多少。

选择 Ubuntu 是因为它比 Debian 多了很多驱动,对新手很友好,你遇到的问题在 ask ubuntu,stackoverflow 上都能搜到。如果不是很喜欢 GNOME,也可以尝试基于 Debian 的 KDE 的发行版,不再赘述。最后复读一下为什么选 Ubuntu,第一是基于 Debian,比 Centos 系内核要新的多,又比 Arch 相对稳定。对新手最友好,遇见问题在社区基本都能搜到答案。其次是对桌面来说比较省心,虽然臃肿,占用资源大,但是基本不用去额外安装什么。

推荐当前最新版本(以 20.04 为最新稳定发行版为例)的上一个版本,比如 18.04 是出到 18.04.5 以上了,优先选择 18.04 的最新版 18.04.6 。现在 20.04 出到了 20.04.4 了,个人是觉得一般发行版出到了 4 和 4 以上也可以尝试入坑了。

开始

进入正题,安装 Ubuntu 遇到的一些问题和推荐的配置。首先个人是推荐不要过分折腾桌面的 UI 和一些美化的效果,这方面不是 Linux 真正的优点,相对来说没那么有价值。工作的时候接触到的 Linux 高手,基本都是很原生朴素的桌面,不影响他们解决核心问题。

首先安装的时候启动盘可以选用 ventoy 这种比较新且好用的开源工具。推荐安装的时候语言选用英语,选用中文的话,路径会变成中文,有时候会出现一些意想不到的 bug,可以安装完成后把语言环境设置成中文但是记得不要把路径也改成中文。安装的时候选用最 mini 模式的安装,速度快。时区上海即可。

安装完成之后,看网络的有线无线是否有问题,一般来说是没有问题。但是这星期安装完之后发现联想 thinkbook14p 居然无线的驱动居然有问题。查了一下社区找到方案 rtw89,按照 readme 编译执行即可。如果有网卡显卡等硬件驱动问题一般搜社区都能找到方案。

代理

首先强调一下想拥有好的工作学习体验最重要的是网速,能换源的地方一定要先都换源,其次是有一个体验良好的机场或者自建梯子

apt 源

apt 的阿里腾讯清华源这些用下来个人觉得都大差不差,都挺稳定好用的。也可以让机器自己选择,点下 Select Best Server 按钮即可。
image.png

更改完 apt 代理后,执行更新

  1. sudo apt update
  2. sudo apt upgrade

常见语言类代理

Golang,Rust 这些比较工作相关也需要设置好代理。

Npm 的代理

  1. npm install -g cnpm --registry=https://registry.npmmirror.com

Golang 的代理

  1. go env -w GO111MODULE=on
  2. go env -w GOPROXY=https://goproxy.cn,direct

Rust 代理

Pip 代理

其余的代理可自行搜索。一定要有换源的概念,这些对日常开发体验提升非常重要。

fq 客户端

其次是拥有一个稳定,体验良好的机场或者自建梯子。这里不做推荐,可以去社区或者朋友那咨询。一般现在都支持 Clash 的订阅。个人也是用的 Clash,比较推荐。

选好 Linux AMD64 分支的二进制压缩包后,这里是 1.9.0。解压好,然后记得加权限。

  1. mv clash-linux-amd64-v1.9.0 clash # 重命名
  2. chmod a+x clash # 加权限
  3. ./clash -d . # 启动命令,机场订阅文件(config.yaml)和 clash 同一个目录

可以自己写成脚本,每次开机自动执行启动脚本或者手动都可以。

启动后,把根据 yaml 文件把系统网络代理对应设置好。
image.png

git 代理

更改 git 代理。

  1. git config --global http.proxy 'socks5://127.0.0.1:7891'
  2. git config --global https.proxy 'socks5://127.0.0.1:7891'

命令行代理

命令行有时候也需要翻墙,比如 curl 下载一些东西的时候。可以写一个脚本,每次下载前 source 一下。

  1. export http_proxy="socks5://127.0.0.1:7891"
  2. export https_proxy="socks5://127.0.0.1:7891"

wget 这种是不支持 socks5 代理的,可以走 tsocks 解决。

  1. sudo apt install tsocks

更改 /etc/tsocks.conf,把下面对应的几项更改好。

  1. local = 192.168.1.0/255.255.255.0
  2. server = 127.0.0.1
  3. server_type = 5
  4. server_port = 7891

如果 apt 有时候添加了一些国外站点的源,每次 apt update 更新的时候下载不动,也可以让 apt 走代理

  1. sudo apt -o Acquire::http::proxy="socks5h://127.0.0.1:7891/" update

安装语言

多说一句下载最新版本 Golang、 Node 的时候可以选择用 ppa 来下载,也可以直接二进制来下载,一般官方都有文档介绍,可以无脑一步一步复制粘贴下载。

比如 Golang Wiki 有专门介绍 Ubuntu ppa 下载最新版的方法。

  1. sudo add-apt-repository ppa:longsleep/golang-backports
  2. sudo apt update
  3. sudo apt install golang-go

也可以使用二进制来下载。官方也有保姆教程

  1. rm -rf /usr/local/go && tar -C /usr/local -xzf go1.17.7.linux-amd64.tar.gz
  2. export PATH=$PATH:/usr/local/go/bin # 这行加进 /etc/profile

比如 Node 有二进制下载安装的 wiki 页面,也有 PPA 包管理下载的方案。

总之越是新手越要仔细看文档,不要自己想当然,不然折腾这些挫败感比较强容易退坑。

常用软件推荐

输入法这块个人推荐搜狗,百度都可以。一直用下来没什么很大的痛点。推荐搜狗的官网教程进行安装,一步一步别漏掉。搜狗的繁体切换键很烦,跟 Goland 的全局搜索键冲突。可以修改配置。

打开 ~/.config/sogoupinyin/conf/env.ini
修改 ShortCutFanJian=1 为 ShortCutFanJian=0 即可

终端这块选择比较多,个人用的是深度的终端

  1. sudo apt update -y
  2. sudo apt install -y deepin-terminal

个人用过其他终端也推荐 kittyhyper。看个人习惯喜好。

选择深度终端为默认终端的方法

  1. # ubuntu没有直接设置 deepin-terminal 为默认终端的方式,所以采用先安装其他终端,然后替换其他终端的方式
  2. sudo apt install -y deepin-terminal terminator
  3. echo -e "2 \n"|sudo update-alternatives --config x-terminal-emulator
  4. sudo mv /usr/bin/terminator /usr/bin/terminator.bak
  5. sudo ln -s /usr/bin/deepin-terminal /usr/bin/terminator

办公三件套这块推荐 wps,这块没有其他更好的选择,不过 wps 用下来没有广告也挺稳定好用。
常见的缺失字体安装对应的字体即可。

  1. git clone https://github.com/IamDH4/ttf-wps-fonts.git && cd ttf-wps-fonts
  2. sudo sh install.sh

截图软件个人使用 shutter

  1. sudo add-apt-repository ppa:linuxuprising/shutter
  2. sudo apt update
  3. sudo apt install shutter

视频播放器个人推荐 vlc。

  1. sudo apt install vlc

解压工具个人推荐 unar。

  1. sudo apt install -y unar

音乐播放器推荐网抑云

办公日常交流可以上 slacktg。国外的 IM 软件 Linux 客户端都好用,推荐使用。

虚拟机推荐 vmware,一些 windows 上的工作比如迅雷下载之类的问题需要装个 win 虚拟机。

开发工具这块 Jetbrains Vscode Vim/Neovim/Emacs 等都支持 Linux 平台,萝卜青菜各有所爱,就不再推荐。

Gnome 扩展

gnome 桌面(非 gnome 请跳过)也有扩展,推荐在 chrome 上下载 GNOME Shell integration 这个扩展。对扩展感兴趣的可以去官网上找找喜欢的。

  1. sudo apt install gnome-shell-extensions # 安装 shell 扩展
  2. sudo apt install gnome-tweaks # 控制 Gnome Shell 选项

截图
添加菜单一键管理扩展
用户目录加载主题
锁屏屏幕常亮
微信消息托管
模拟 dock
添加菜单以快速导航系统中的位置
监控机器
监控网络

微信

微信拉出来单独分类是因为堪称毒瘤,印象里就在 Deepin 系统上能开箱即用。

我个人是用的这个 repo 来安装,还有一个维护更老的仓库

  1. wget -O- https://deepin-wine.i-m.dev/setup.sh | sh # 移植仓库添加到系统
  2. sudo apt-get install com.qq.weixin.deepin # 安装微信

推荐把 repo 的 README 读完。

摘几个高频问题的解决方案。

微信无法发送图片

  1. sudo apt install libjpeg62:i386

聊天字体为方框

  1. # 有多种原因,主要是字体的原因
  2. sudo apt install ttf-wqy-microhei #文泉驿-微米黑
  3. sudo apt install ttf-wqy-zenhei #文泉驿-正黑
  4. sudo apt install xfonts-wqy #文泉驿-点阵宋体

如果上面字体安装无效,可以尝试 方法1方法2
最好是把 windows 的所有字体都安装一遍,参考此解决方法字体仓库

分辨率问题

2k 4k 显示器参考此解决方案

强烈建议不要选笔记本分辨率为 3k 的情况。。。。。至今为止没找到合适的方法

表情崩溃

这几天碰到的问题,搜了下更新了 wine 这个都遇到了这个问题,暂时无解,解决方案是回退版本。参考此 Issue

一点建议

说个暴论,腾讯的生态在 Linux 上就是毒瘤,其他软件比如 TIM 还是腾讯会议,Linux 客户端同样是一坨屎,最近使用腾讯会议使用的时候全是噪音根本没法用,也不知道为啥官方要放 deb 出来,还不如不做。所以鼓励大家使用 Slack 或者 Tg 来聊天办公。

遇见问题多去 Issue 区搜索,一般都能搜到。链接1 链接2

Zsh

我个人使用是 oh-my-zshzinit 管理插件,zsh 有很多插件提高生产力的,有兴趣的可以去 github 上挨个体验。

个人比较推荐的插件有

p10k
zsh-autosuggestions
fast-syntax-highlighting
starship
spaceship
fzf-tab
z.lua

还有一些官方自带的插件可以慢慢体验

比如

git
sudo
command-not-found 等。

我的 zshrc 配置:

  1. if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  2. source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
  3. fi
  4. export ZSH="$HOME/.oh-my-zsh"
  5. source $ZSH/oh-my-zsh.sh
  6. ### Added by Zinit's installer
  7. if [[ ! -f $HOME/.local/share/zinit/zinit.git/zinit.zsh ]]; then
  8. print -P "%F{33} %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
  9. command mkdir -p "$HOME/.local/share/zinit" && command chmod g-rwX "$HOME/.local/share/zinit"
  10. command git clone https://github.com/zdharma-continuum/zinit "$HOME/.local/share/zinit/zinit.git" && \
  11. print -P "%F{33} %F{34}Installation successful.%f%b" || \
  12. print -P "%F{160} The clone has failed.%f%b"
  13. fi
  14. source "$HOME/.local/share/zinit/zinit.git/zinit.zsh"
  15. autoload -Uz _zinit
  16. (( ${+_comps} )) && _comps[zinit]=_zinit
  17. # Load a few important annexes, without Turbo
  18. # (this is currently required for annexes)
  19. zinit light-mode for \
  20. zdharma-continuum/zinit-annex-as-monitor \
  21. zdharma-continuum/zinit-annex-bin-gem-node \
  22. zdharma-continuum/zinit-annex-patch-dl \
  23. zdharma-continuum/zinit-annex-rust
  24. # Load powerlevel10k theme
  25. zinit ice depth"1" # git clone depth
  26. zinit light romkatv/powerlevel10k
  27. zinit for \
  28. light-mode zdharma-continuum/fast-syntax-highlighting
  29. zinit light zsh-users/zsh-autosuggestions
  30. zinit ice from"gh-r" as"program"
  31. zinit light junegunn/fzf
  32. zinit ice from"gh-r" as"program" mv"docker* -> docker-compose" bpick"*linux*"
  33. zinit load docker/compose
  34. zinit ice as"program" atclone"rm -f src/auto/config.cache; ./configure" \
  35. atpull"%atclone" make pick"src/vim"
  36. zinit light vim/vim
  37. zinit ice as"program" pick"$ZPFX/bin/git-*" make"PREFIX=$ZPFX"
  38. zinit light tj/git-extras
  39. zinit light starship/starship
  40. zinit light spaceship-prompt/spaceship-prompt
  41. zinit light skywind3000/z.lua
  42. zinit light Aloxaf/fzf-tab
  43. zinit light ellie/atuin
  44. zinit snippet OMZ::plugins/git/git.plugin.zsh
  45. zinit snippet OMZ::plugins/command-not-found/command-not-found.plugin.zsh
  46. zinit snippet OMZ::plugins/extract/extract.plugin.zsh
  47. zinit snippet OMZ::plugins/sudo/sudo.plugin.zsh
  48. zinit snippet OMZ::plugins/fzf/fzf.plugin.zsh
  49. ### End of Zinit's installer chunk
  50. alias ls='exa --long --header --git'
  51. alias find='fd'
  52. alias grep='rg'
  53. alias lzd='lazydocker'
  54. # 代理
  55. alias proxyon='export http_proxy=http://127.0.0.1:7890 https_proxy=http://127.0.0.1:7890'
  56. alias proxyoff='unset http_proxy https_proxy'
  57. function gitproxyon() {
  58. git config --global http.https://github.com.proxy 'socks5://127.0.0.1:7891'
  59. }
  60. function gitproxyoff() {
  61. git config --global --unset http.https://github.com.proxy
  62. }
  63. # 粘贴
  64. pasteinit() {
  65. OLD_SELF_INSERT=${${(s.:.)widgets[self-insert]}[2,3]}
  66. zle -N self-insert url-quote-magic # I wonder if you'd need `.url-quote-magic`?
  67. }
  68. pastefinish() {
  69. zle -N self-insert $OLD_SELF_INSERT
  70. }
  71. zstyle :bracketed-paste-magic paste-init pasteinit
  72. zstyle :bracketed-paste-magic paste-finish pastefinish
  73. export RUSTUP_DIST_SERVER="https://rsproxy.cn"
  74. export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
  75. # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
  76. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
  77. (( ! ${+functions[p10k]} )) || p10k finalize

上面的配置里有很多 go 和 rust 写的命令行,参考这个 repo。感兴趣的可以挨个安装体验。

推荐:

fzf (推荐完整阅读 README,极大提升效率和心情愉悦)
bat fd rg exa(这四个都是 rust 写的命令行,性能和提升都友好很多)
tldr (linux 命令行例子,碰到用的比较少的命令时很提高生产力)
lazydocker (docker 无脑 d enter 很愉悦)

Docker

高内高速安装 docker & docker-compose

  1. curl -sSL https://get.daocloud.io/docker | sh
  2. curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  3. chmod +x /usr/local/bin/docker-compose

镜像加速

  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
  5. }
  6. EOF
  7. sudo systemctl daemon-reload
  8. sudo systemctl restart docker

Chrome 插件

可以找社区的插件挨个体验。

推荐下跟开发者比较相关的插件。

代码格式
暗黑模式
划词翻译
github 文件浏览

油猴插件推荐几个开发者相关的

破除登录复制
csdn 优化

这一块推荐文章写的比较多,就不再赘述。

UI

这一块只推荐这个人的主题,个人觉得足够好看。

字体个人推荐微软家的 cascadia-code,adobe 的 source-code-pro,和 jb 家的 JetBrainsMono。终端用的微软的,系统界面字体用的 adobe 的。写代码的字体是 jb 家的。

再啰嗦一次,个人不是很推荐花很大精力去折腾 UI。这不是 Linux Desktop 真正的优势。

学习资料 & 社区

ask ubuntu (正确搜问题,一般都能找到解决答案)

命令行的艺术 (足够经典且实用)

vimtutor (vim 新手教程,如果不是 vim/neovim 用户,掌握此教程足够实用)

Arch Wiki )(建议挑着过一遍)

命令索引 (新手可以跟着敲一遍)