menu Chancel's Blog
rss_feed lightbulb_outline

用Linux做程序开发03 - Manjaro开发配置指南

Linux上比较痛苦的显然是很多国产软件都没有,不过相对应的,你可以随便下软件不用担心软件流氓问题。 另外,Linux桌面系统最强大之处大概在于强大的的花里胡哨自定义功能

1. Linux桌面

1.1. “最好用”的桌面

如果你跟我一样翻遍各个论坛想了解各大Linux桌面的优劣,那你可以看到一场异常浩大的信仰之战,KDE信徒与Gnome信徒战的不亦乐乎,Mate大喊Gnome3邪教,Xfce表示轻才是王道……

这些年我也用过不少桌面发行版,从入门的Ubuntu Unity到Xfce到Mint,再到Gnome,KDE..不敢说全部桌面都使用过,但起码我认为这个问题非常主观

最好用的桌面不代表最适合你,一如我认为Windows10是最优秀的操作系统之一,但这并不妨碍我觉得他用着不顺手,不要去争论最好用的发行版桌面

如果有时间,逐个逐个试试,热爱技术的人不应该是固步自封,对新潮的技术保持敬畏保持兴趣,才是一个好厨子

1.2. Gnome与KDE

我用过最长时间的桌面应该是Xfce,如果公司的办公环境也算的话,Xfce在稳定性/流畅程度上几乎上完美的,没有太多的可玩行与特效,保持简洁与需要专注工作的公司环境十分契合

KDE,是Linux桌面下目前前景最好的,基于QT桌面的开发使得他的流畅性与资源占用几乎是性价比最高的,可自定义化的程度远远超过Gnome,更别说Xfce

但我仍然喜欢Gnome3,无他,在极端简洁与极端自定义之间,我认为Gnome把握住了那个度,这些都是非常优秀的桌面,都值得尝试一下,安装一个桌面最快的方式便是虚拟机

usb live cd 也不错

2. 调教

这一部分的设置大致上KDE/Gnome3/Xfce是通用的

2.1. oh-my-zsh

Oh My Zsh is an open source, community-driven framework for managing your zsh configuration.

zsh已经不用介绍了,除了在服务器上要照顾通用性外,没有任何理由不用zsh去替代Bash最为常用的Shell,但zsh的复杂配置绝对劝退

正所谓“程序员往往把复杂的东西搞简单,把简单的问题搞复杂”,所以oh-my-zsh就是为了解决复杂的zsh配置,简单暴力的安装一套极好用的Shell

官方仓库已经收录ZSH了,稍微新一些的Manjaro版本都已经收录默认zsh作为默认shell了

先查看一下当前已经安装的虚拟终端

cat /etc/shells
# 如果没有zsh,使用下面的指令进行安装
sudo pacman -S zsh

自定义ZSH的配置比较繁琐,如果对自定义ZSH无兴趣,则直接采用oh-my-zsh

oh-my-zsh采用下面任一命令进行一键安装(官方提供,无需担心)

# curl方式安装
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
# wget方式安装
sh -c "$(wget -O- https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

# 切换ZSH
chsh -s /bin/zsh

ZSH主题更换需要编辑"~/.zshrc"文件,然后更改“ZSH_THEME”的值,至于主题有哪些?可以查看ZSH主题列表

ZSH比起Bash,支持很多插件,例如

  • 高亮已知的命令:zsh-syntax-highlighting
  • 提示历史命令:zsh-autosuggestions
  • 自动跳转目录:autojump

其他强大的欢迎插件可以自行Google查找

2.2. shell主题

zsh的主题都非常好看,但要说好用的主题我觉得还是要足够简洁,typewritten便是佼佼者

效果如图

安装方法也非常简单,如果你安装了oh-my-zsh的话,只需要如下2步

首先克隆仓库并且创建软连接

git clone https://github.com/reobin/typewritten.git $ZSH_CUSTOM/themes/typewritten
ln -s "$ZSH_CUSTOM/themes/typewritten/typewritten.zsh-theme" "$ZSH_CUSTOM/themestypewritten.zsh-theme"

然后更改主题样式即可

vim ~/.zshrc
ZSH_THEME="typewritten"

重新登录Shell即可看到效果

2.3. 桌面主题

如果你也跟我一样觉得装个Manjaro上个MacOS的主题特别憨的话,那么vimix系列绝对是值得一看的主题系列,支持GTK2/3,支持drak/light两种模式切换,还有一套与之配套的Icon

主题安装方法非常简单

git clone https://github.com/vinceliuice/vimix-gtk-themes.git
cd vimix-gtk-themes
sudo ./install.sh

安装图标

git clone https://github.com/vinceliuice/vimix-icon-theme.git
cd vimix-icon-theme.
sudo ./install.sh

接着在桌面的主题控制中心启用即可,Gnome下使用Tweak选择主题即可

3. 软件

3.1. Glances

Windows下有个难以想象的好用工具 - 任务管理器,Linux有个更能打的TOP指令..但话说回来TOP能打到把自己打死了,而且任务管理器很多时候还提供性能参考,服务参考以及内存消耗这一点TOP做不到

相较而言,在Windows下我经常借助任务管理器来判断一些问题,例如是磁盘问题 or cpu占用率问题 or 结合监测信息判断硬件问题这样的功能,在Linux下Top也能做到,但要掌握也存在一定学习成本

所以另外推荐一个同样也非常优秀且简易上手的工具,那就是Glances,Glances运行截图如下(原谅我的白色主题,工作环境比较亮)

通过Glances可以很清晰的看到CPU/RAM/NETWORK等等的信息,非常全面,而且还用颜色标注出来,对于健康的选项Glances使用的是绿色,对于警报Glances使用的是黄色,对于有问题的选项比如百分百的CPU占用Glances会标注成红色

在Manjaro/Debian下,Glances已被收集到官方仓库,使用包管理器均可以安装

# Manjaro
sudo pacman -S glances
# Debian
sudo apt install glances

如果你是Cent/Fedroa则需要自行编译,可参考glances - github.com (没错我就是要鞭尸Red Hat)

3.2. Visual Studio Code

自从用了VSC做开发IDE之后,除非必要否则我已经完全抛弃了Pycharm/PhpStorm等工具了

安装方法

sudo pacman -S code

另外列一个我觉得还不错的插件列表,格式化插件与语言插件不在此列,毕竟把所有语言插件列一遍可能这边文章要加载300秒

插件名称 插件说明
Auto Close Tag & Auto Rename Tag 如果你写HTML,一定修改过HTML标签,这两款插件可以帮助你自动添加关闭标签与自动修改关闭标签内容
Code Runner 安装这款插件之后,你只需要写好语言文件,选中代码块,然后右键Run Code就完事了,非常适合写代码时测试一些简单语法
Markdown All in One 用VSC写Markdown文本,你就需要这款插件
Markdown PDF 支持把Markdown导出成PDF文件,非常适合分享
Markdown Preview Enhanced Markdown文本预览
Markdown TOC 为你的Markdown笔记添加目录
Setting Sync 如果你有多台PC多个VSC,这个插件可以帮助你同步你所有的VSC设置/插件
vscode-icons vsc默认的图标不是很好看(很Windows风),可以使用这款插件美化你的vsc

3.3. Remmina

不得不承认Windows下有许多客户端是无法被替代的,我自己使用也一直是保持一台Windows10的机器保持开机可以远程

否则难以解决一些常用软件缺失的问题,最起码office/TIM/Wechat太多太多客户端没有Linux版本的,比起现在越发不明显的开发优势,常用软件客户端的缺失才是一直以来Linux发行版桌面最大的问题

这个问题与其安装无数不稳定的Linux第三方客户端版本,不如安装一个好用的Windows远程工具

一开始在Linux下使用VNC客户端远程Windows的时候,效率着实感人,也非常不好用,直到接触remmina

几乎支持所有主流的远程格式RDP/VNC/SSH/SFTP甚至是Teamviewer!还有无比强悍的自定义功能(Windows远程质量内网可以直接选择Best,完美的体验)

这是Linux下我最推荐的远程工具了,安装方式较为简单,Ubuntu/Arch可以直接使用包管理器安装,其他发行版可以自行参考Github上remmina项目安装说明进行安装

3.4. KVM

在Linux下虚拟Windows?好吧有点本末倒置,但Linux未必没有媲美Hyper-V的虚拟机软件

Linux下的虚拟框架KVM,相比其他虚拟软件,KVM提供内核级别的虚拟,最大性能的共享物理机器的性能,实测虚拟的Winodws10在固态硬盘下体验较为流畅,不过个人建议虚拟Windows这种事,机器配置好的可以上

我的配置是512G SATA固态 + 32G内存 + E3CPU,不做太复杂的事情还算吃得消,不过即使这样虚拟的Windows10的速度也只能算勉为其难

以下过程参考 KVM(简体中文) - ArchWiki

检查支持情况

# 检查BIOS虚拟化是否开启,Intel处理器输出VT-x,AMD处理器输出AMD-V
LC_ALL=C lscpu | grep Virtualization
# 如果模块设置不为 y或m,则该模块不可用
zgrep CONFIG_KVM /proc/config.gz
# 检查VIRTIO模块是否可用
zgrep VIRTIO /proc/config.gz

这是我机器上的输出,可以对照一下

# chancel @ chancel-cp in ~ [11:31:22] 
$ LC_ALL=C lscpu | grep Virtualization
Virtualization:      VT-x

# chancel @ chancel-cp in ~ [11:31:24] 
$ zgrep CONFIG_KVM /proc/config.gz
CONFIG_KVM_GUEST=y
# CONFIG_KVM_DEBUG_FS is not set
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_KVM_VFIO=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_KVM_COMPAT=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_MMU_AUDIT=y

# chancel @ chancel-cp in ~ [11:31:33] 
$ lsmod | grep kvm
kvm_intel             249856  0
kvmgt                  28672  0
mdev                   20480  2 kvmgt,vfio_mdev
vfio                   32768  3 kvmgt,vfio_mdev,vfio_iommu_type1
kvm                   733184  2 kvmgt,kvm_intel
irqbypass              16384  1 kvm

# chancel @ chancel-cp in ~ [11:32:28] 
$ zgrep VIRTIO /proc/config.gz
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS_COMMON=m
CONFIG_NET_9P_VIRTIO=m
CONFIG_VIRTIO_BLK=m
# CONFIG_VIRTIO_BLK_SCSI is not set
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_CAIF_VIRTIO=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_DRM_VIRTIO_GPU=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_MMIO=m
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_RPMSG_VIRTIO=m
CONFIG_CRYPTO_DEV_VIRTIO=m

安装KVM以及相关依赖项

# 连接网络依赖ebtables dnsmasq bridge-utils openbsd-netcat等包
sudo pacman -S qemu virt-manager virt-viewer dnsmasq vde2 bridge-utils openbsd-netcat ebtables iptables

启动KVM后台服务并启动GUI管理界面

sudo systemctl enable libvirtd.service
sudo systemctl start libvirtd.service
virt-manager

到这一步就结束了,从创建开始都是图形化傻瓜操作了

3.5. DBeaver

数据库的UI图形工具,DBeaver在Linux桌面下表现也很优秀,基于Java开发的一款图形数据库管理工具,支持几乎所有主流数据库

安装方法亦是很简单,可以参考DBeaver官网

3.6. Disk Usage Analyzer

Windows下的第三方磁盘分析非常丰富,Linux下的话当桌面系统使用如果习惯得当通常不会需要分析磁盘占用,如果需要用到磁盘占用分析,推荐Disk Usage Analyzer

大部分发行版都自带这个软件,可以直接使用软件包管理器进行安装

3.7. 其他 - 最佳Deepin系软件

Deepin出现的意义太赞了!最美妙的好处无过于带来了大量质量过关的软件,下面是常见的Deepin系的软件(主要是外观太优秀了),Arch都可以直装的,其他发行版需要自助搜索看看

软件 介绍
deepin-calculator Deepin版计算器(推荐)
deepin-screenshot Deepin版截图(推荐)
deepin-system-monitor Deepin版系统监控(推荐)
deepin.com.qq.im Deepin版TIM
deepin-wine-wechat Deepin版微信
deepin.com.qq.office Deepin版WPS
deepin.com.thunderspeed Deepin版迅雷
deepin-movie Deepin版视频播放器
deepin-picker Deepin版取色器

上面这些常用软件已经可以满足在Linux下一般使用了,还有太多太多优秀的软件没有分享,如果有其他相同类型更优秀的软件欢迎留言分享

4. 题外话:Windows终端 VS Linux终端

对于每一个使用Linux桌面版的用户来讲,最好的礼物无过于Terminal,即便Windows已经有Terminal预览版下载,但经过使用稳定性与UI仍然不足

其实我更认同Windows自带是没有终端模拟器的,只是有一个用于输入Shell的工具,微软似乎无意开发一个好用的终端

那么终端的定义是什么?这个展开恐怕太复杂了,暂且限定我们这里讨论的是桌面的终端模拟器

对于Windows下,自带的终端是CMD与PowerShell,可以安装官方的Terminal预览版,Linux发行版大多根据其桌面版自带一个终端模拟器,三者截图对比如下

从外表上来看,CMD...无法评价,PowerShell没有截图,但也跟CMD半斤八两

而Windows Terminal预览版很好看了,而且也支持主题定制了

Linux的终端模拟器则有千百万个样子,选择之多让人眼花缭乱更能满足用户对外观的挑剔

但外观终究只是一部分,核心还是Shell,至于Shell的好坏我个人无法评论,平心而论Bash是要比CMD以及PowerShell优秀的,更别提ZSH这些后起之秀

但对于用户来讲,很显然CMD和PowerShell是极其难用的,而且没有替代品!Windows下你如果不爽CMD,在Windows Terminal发布之前都是不好意思爱用不用

CMD与PowerShell还有一点是我写了两年C#最难以忍受的一点,极其不方便的,举几个例子

  • 复制粘贴体验
  • 支持的色彩和高亮显示
  • 自定义字体的显示
  • 对Unicode的支持
  • 大小写指令

这些在我使用Bash的时候都感到极大的愉悦..说到底一个好用的Terminal大概是我坚持Linux发行版的最大原因了

题外话到此为止,这个系列不知道有没有下一篇,还没想到要补充什么,目前3篇基本已经讲完最为开发机器的基本配置的,其他的太个人化了反而不好总结

想到什么再补充下一篇吧

阅读 - 222
分类 - 操作系统
创建于 2019-12-24 17:57:57
阅读 - 222
分类 - 操作系统
创建于 2019-12-24 17:57:57
博文目录

[[replyMessage== null?"发表评论":"@" + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageList.data.items.length]])

[[messageItem.create_time]]
[[messageItem.m_environ.browser]] [[messageItem.m_environ.os]] [[messageItem.m_environ.device]]
[[subMessage.m_author]] @ [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[subMessage.m_environ.browser]] [[subMessage.m_environ.os]] [[subMessage.m_environ.device]]