一不注意竟然已经三个多月没写文章了,十一月份总算找到感觉比较满意的实习工作了,同时把近视给弄好了,已经有十多年没有这么清晰地看过这个世界了:-D
前言
关于ArchLinux请自己谷歌度娘,由于整个工作环境都是自己从头开始搭建的,最是熟悉和顺手,再加上神器yaourt,滚动更新(一年多来未滚挂过),十分给力的Wiki,简直爱不释手。
笔者已经在主力机上运行这套工作环境一年多,暂未感到任何不适。
如果对Linux不是很熟悉且不太乐于折腾的请绕过。
搭建完成后大概是下面这个样子:
桌面使用i3-gaps(i3wm的分支)+py3status+i3lock+LilyTerm。
- 选择平铺桌面管理器是因为可以自动排列所有打开的窗口,所有窗口操作使用快捷键实现、最大化利用工作区、最大化利用屏幕空间、占用资源小。
- 选择i3-gaps是因为i3wm的本身配置非常简单,i3-gaps在它的基础之上增加窗口间隙调整的支持,方便把桌面弄得更漂亮一些。
- 选择py3staus是因为它支持更多的插件和属性配置。截图中右下角显示的信息分别是:内存 内存使用率|cpu使用率|cpu温度|下行速度 上行速度|未读邮件数|当前时间|音量|单机截图|DPMS|其他软件。
- 选择LilyTerm是因为易于配置和对中文支持比较好。
整个桌面最多可以开启10个工作区,我的布置是这样的:
- 窗口1(1:Info)用来运行glances+系统命令。
- 窗口2(2:Web)运行浏览器。
- 窗口3~8(3~8:Work)运行开发相关的程序。
- 窗口9(9:Other)虚拟机运行windows10。
- 窗口10(10:Other)运行音乐播放器。
- 同时在一个可切换显示和隐藏的小窗口中运行ydcv,需要翻译的时候就切换出来相当方便。
我说这么多1 2 3 4…………只为了说明一点:只要习惯了自己配置的快捷键和空间布局,工作效率飕飕地往上升。习惯了在平铺式的桌面中开发后,再回到windows这类层叠式的有种生不如死的感觉= =
基本系统的安装
ArchLinux的Wiki是十分完善的,且大多数常用的文档都有中文版,系统的安装主要也是参照Installation guide (简体中文)),如果按照以下流程安装系统时和官方Wiki有冲突,以官方Wiki为准。
- 执行ping www.baidu.com测试网络是否可用,安装过程中需要用到网络。
- 执行timedatectl set-ntp true设置时间自动同步。
- 执行fdisk -l查看要安装的目标硬盘,并用fdisk对硬盘进行操作,我要把系统安装到/dev/sda这个硬盘中。
- 执行fdisk /dev/sda,其中/dev/sda是步骤3中找到的,fdisk的详细使用方法请查阅Wiki,如果你的硬盘是GPT磁盘分区,要记得创建一个EFI分区。
- 我是MBR磁盘分区,在进入fdisk工具后:
- 重复执行d命令直到删除所有已有分区。
- 执行n命令创建分区,Partition type、Partition number、First sector直接回车用默认值,Last sector输入+512M表示给该分区分配512M大小的空间。
- 执行n命令创建根分区,分配45G的空间
- 执行n命令并一路回车,把硬盘所有剩余空间都给home分区, 如果有需要的话也可以选择再分配一个swap分区。
- 执行p命令查看是否和预想中的分区情况一致。
- 如果上一个步骤没问题的话,执行w命令保存并退出。
- 我是MBR磁盘分区,在进入fdisk工具后:
- 执行mkfs.ext4 /dev/sda1格式化/dev/sda1分区为EXT4格式。
- 执行mkfs.ext4 /dev/sda2格式化/dev/sda2分区为EXT4格式。
- 执行mkfs.ext4 /dev/sda3格式化/dev/sda3分区为EXT4格式。
- 执行mount /dev/sda2 /mnt挂载根分区。
- 执行mkdir /mnt/boot和mkdir /mnt/home分别创建boot分区和home分区的挂载点。
- 执行mount /dev/sda1 /mnt/boot和mount /dev/sda3 /mnt/home分别将对应的分区挂载好。
- 执行vim /etc/pacman.d/mirrorlist,删除不需要的mirror,我只保留了163和中科大的mirror。
- 执行pacman -Syy更新mirror数据库。
- 执行pacstrap /mnt base base-devel安装基本系统。
- 执行genfstab -U /mnt >> /mnt/etc/fstab生成fstab文件。
- 执行arch-chroot /mnt /bin/bash切换到新安装的系统上。
- 执行pacman -S vim安装vim。
- 执行ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime设置时区。
- 执行hwclock --systohc --utc设置时间标准 为 UTC。
- 执行vim /etc/locale.gen修改本地化信息,移除en_US.UTF-8 UTF-8、zh_CN.UTF-8 UTF-8、zh_TW.UTF-8 UTF-8前面的#后保存。
- 执行locale-gen生成本地化信息。
- 执行echo LANG=en_US.UTF-8 > /etc/locale.conf将系统 locale 设置为en_US.UTF-8.
- 执行echo myhostname > /etc/hostname修改主机名。
- 执行systemctl enable dhcpcd设置dhcpcd自启动。
- 执行passwd设置root密码。
- 执行pacman -S grub os-prober efibootmgr安装grub、os-prober和efibootmgr。
- 安装引导程序:
- grub-install --target=i386-pc /dev/sda
- grub-mkconfig -o /boot/grub/grub.cfg
- 执行exit。
- 执行umount -R /mnt。
- 执行reboot
到此为止,基本系统已经安装完成,重启后登陆root帐号开始搭建桌面环境。
搭建桌面环境
创建用户和安装常用的程序
- 执行useradd -m yourusername创建新用户,并执行passwd yourusername设置登陆密码。
- 执行vim /etc/sudoers编辑sudo权限,复制一行root ALL=(ALL) ALL, 并替换其中的root为新用户名,保存并退出。
- 执行exit退出root用户,并登陆新创建的用户。
- 执行sudo pacman -S alsa-utils xf86-video-vesa xorg xorg-xinit安装声卡、显卡及xorg。
- 执行sudo pacman -S zsh git unrar zip unzip openssh glances htop iftop screenfetch tree vlc wget net-tools安装常用程序。
安装oh-my-zsh
执行sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"安装oh-my-zsh,我们将使用它作为默认shell。
执行vim .zshrc编辑配置文件,修改ZSH_THEME的值可以更改shell的主题,主题可以到这里来查看,我个人比较喜欢使用rkj-repos这个主题。
在配置文件最底端加入一下代码段为一些命令创建别名:
- alias ll='ls -l'
- alias la='ls -a'
- alias vi='vim'
- alias svi='sudo vim'
- alias grep='grep --color=auto'
- alias install='sudo pacman -S'
- alias remove='sudo pacman -Rcn'
- alias upgrade='sudo pacman -Syu'
- alias findProc='ps -ef | grep '
- alias docker='sudo docker '
- alias cls='printf "\033c"'
编辑完成后保存并退出,执行source .zshrc更新。
插件和其他的配置根据自己所需到这里查询配置。
安装yaourt
执行sudo vim /etc/pacman.conf,在文件最底部加入以下文本后保存并退出:
- [archlinuxcn]
- SigLevel = Optional TrustAll
- Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
然后执行sudo pacman -Syu yaourt更新仓库数据库并安装yaourt。
接着再执行install archlinuxcn-keyring安装archlinuxcn的keyring,不然有些pacman的软件包无法安装。
配置桌面环境
配置i3wm
- 执行install i3lock i3status compton dmenu feh, compton如果没有装的话会一些窗口效果会消失。因为i3wm是没有桌面图标这些东西的,所以我们通过dmenu来打开应用程序。feh是用来设置壁纸的。
- 执行yaourt i3-gaps安装i3wm。
安装好i3-gaps后,编辑~/.i3/config文件配置i3wm的快捷键和外观等,其中mod键我设置为win键。
以下是我的快捷方式:
窗口管理
win+0 ~ win+9:切换工作区。
win+左:聚焦到左边的窗口。
win+右:聚焦到右边的窗口。
win+上:聚焦到上边的窗口。
win+下:聚焦到下边的窗口。
win+shift+左:移动当前聚焦的窗口到左边。
win+shift+右:移动当前聚焦的窗口到右边。
win+shift+上:移动当前聚焦的窗口到上边。
win+shift+下:移动当前聚焦的窗口到下边。
win+shift+0 ~ win+shift+9:将当前聚焦的窗口移动到指定的工作区中。
win+H:窗口水平分离,即新创建的窗口将会出现在当前窗口的右侧。win+V:窗口垂直分离,即新创建的窗口将会出现在当前窗口的下侧。
win+R:调整当前聚焦的窗口的大小,在按完快捷键后再按方向键即可调整。win+F:切换当前聚焦的窗口为全屏/非全屏。
ctrl+alt+W:关闭当前聚焦的窗口。
win+shift+space:使当前聚焦的窗口浮动。
win+space:在浮动的窗口和非浮动的窗口之间切换焦点。
win+T:切换窗口显示为边框+标题栏。
win+Y:切换窗口显示为只有1像素的边框。
win+U:切换窗口显示为没有边框也没有标题栏,默认为这种显示方式,因为边框和标题栏太丑而且太占空间了= =。
win+shift+ -:移动当前窗口到scratchpad中,即可以在需要的时候将其调出来,不需要时将其隐藏。win+ -:切换scratchpad中的窗口的显示与否,该功能我最常将用来创建一个运行ydcv进程的窗口来翻译,相当方便。
系统命令
win+回车:打开一个新的终端。
win+E:打开dmenu,会在屏幕顶部出现一个黑色输入框,输入程序名字按回车就会打开程序。
win+L:锁屏。
win+E:打开资源管理器。
fn+音量+:音量上调5%。fn+音量-:音量下调5%。
win+shift+Q:调出系统命令。
在调出系统命令后,按O注销会话、S关机、R重启、Esc取消。
win+shift+C:重新加载i3wm的配置文件。
win+shift+R:重新启动i3wm,不会丢失已经打开的窗口等信息。
win+shift+E:关闭i3wm,将会导致所有窗口被关闭。
以下是我的配置:
- #===============设置字体===============
- font pango:Source Code Pro, EmojiOne Color 10
- #===============定义$mod键为win键===============
- # customized
- set $mod Mod4
- #===============设置窗口边框===============
- new_window none
- bindsym $mod+t border normal
- bindsym $mod+y border pixel 1
- bindsym $mod+u border none
- #===============状态栏===============
- bindsym $mod+m bar mode toggle
- bar {
- i3bar_command i3bar -t
- # status_command i3status
- status_command py3status
- position bottom
- modifier Shift
- separator_symbol " | "
- colors {
- background #000000CC
- #statusline #000000FF
- separator #B8F788
- focused_workspace #B8F788 #000000AA
- active_workspace #FFFFFF #FFFFFFAA
- inactive_workspace #AAAAAA #000000AA #AAAAAA
- urgent_workspace #E57B85 #000000AA
- }
- }
- #===============窗口间距===============
- gaps inner 6
- gaps outer 0
- smart_gaps on
- #===============系统命令===============
- set $mode_system 注销(O) 关机(S) 重启(R) 取消(Esc)
- bindsym $mod+shift+q mode "$mode_system"
- mode "$mode_system" {
- bindsym o exec i3-msg exit
- bindsym s exec systemctl poweroff
- bindsym r exec systemctl reboot
- bindsym Escape mode "default"
- }
- #===============鼠标聚焦===============
- focus_follows_mouse no
- #===============锁屏快捷键===============
- # bindsym Mod4+l exec --no-startup-id i3lock -i '/home/huang/Pictures/Wallpapers/universe.png'
- bindsym Mod4+l exec --no-startup-id i3lock -i 'path/to/lock/screen/wallpaper'
- #===============自动启动fcitx===============
- exec --no-startup-id fcitx
- bindsym $mod+e exec nautilus
- #===============音量控制===============
- bindsym XF86AudioRaiseVolume exec --no-startup-id amixer -q sset Master 5%+
- bindsym XF86AudioLowerVolume exec --no-startup-id amixer -q sset Master 5%-
- #===============浮动窗口===============
- # use Mouse+Mod1 to drag floating windows to their wanted position
- #floating_modifier $mod
- #===============打开终端===============
- # bindsym $mod+Return exec i3-sensible-terminal
- bindsym $mod+Return exec lilyterm
- #===============关闭窗口===============
- bindsym Control+Mod1+w kill
- #===============打开dmenu===============
- # start dmenu (a program launcher)
- bindsym $mod+d exec dmenu_run
- # There also is the (new) i3-dmenu-desktop which only displays applications
- # bindsym Mod1+d exec --no-startup-id i3-dmenu-desktop
- # change focus
- #bindsym $mod+$left focus left
- #bindsym $mod+$down focus down
- #bindsym $mod+$up focus up
- #bindsym $mod+$right focus right
- # alternatively, you can use the cursor keys:
- #===============窗口聚焦===============
- bindsym $mod+Left focus left
- bindsym $mod+Down focus down
- bindsym $mod+Up focus up
- bindsym $mod+Right focus right
- # move focused window
- #bindsym $mod+Shift+$left move left
- #bindsym $mod+Shift+$down move down
- #bindsym $mod+Shift+$up move up
- #bindsym $mod+Shift+$right move right
- # alternatively, you can use the cursor keys:
- #===============窗口移动===============
- bindsym $mod+Shift+Left move left
- bindsym $mod+Shift+Down move down
- bindsym $mod+Shift+Up move up
- bindsym $mod+Shift+Right move right
- #===============窗口拆分模式===============
- bindsym $mod+h split h
- bindsym $mod+v split v
- #===============切换全屏===============
- bindsym $mod+f fullscreen toggle
- #===============切换布局模式===============
- #bindsym $mod+s layout stacking
- #bindsym $mod+w layout tabbed
- #bindsym Mod1+e layout toggle split
- #===============切换窗口浮动===============
- bindsym $mod+Shift+space floating toggle
- #===============浮动/平铺聚焦切换===============
- bindsym $mod+space focus mode_toggle
- #===============聚焦到父窗口===============
- #bindsym $mod+a focus parent
- #===============聚焦到子窗口===============
- #bindsym Mod1+d focus child
- #===============添加窗口到存储===============
- bindsym $mod+Shift+minus move scratchpad
- #===============切换存储器中的窗口===============
- # Show the next scratchpad window or hide the focused scratchpad window.
- # If there are multiple scratchpad windows, this command cycles through them.
- bindsym Mod1+minus scratchpad show
- #===============绑定workspace快捷键===============
- # switch to workspace
- bindsym $mod+1 workspace 1:Info
- bindsym $mod+2 workspace 2:Web
- bindsym $mod+3 workspace 3:Work
- bindsym $mod+4 workspace 4:Work
- bindsym $mod+5 workspace 5:Work
- bindsym $mod+6 workspace 6:Work
- bindsym $mod+7 workspace 7:Work
- bindsym $mod+8 workspace 8:Other
- bindsym $mod+9 workspace 9:Other
- bindsym $mod+0 workspace 10:Other
- #==============设置workspace默认显示到LVDS1===============
- workspace "1:Info" output LVDS1
- workspace "2:Web" output LVDS1
- workspace "3:Dev" output LVDS1
- workspace "4:Dev" output LVDS1
- workspace "5:Dev" output LVDS1
- workspace "6:Dev" output LVDS1
- workspace "7:Dev" output LVDS1
- workspace "8:Music" output LVDS1
- workspace "9:Other" output LVDS1
- workspace "10:Other" output LVDS1
- #===============绑定移动窗口到指定workspace快捷键===============
- # move focused container to workspace
- bindsym $mod+Shift+1 move container to workspace 1:Info
- bindsym $mod+Shift+2 move container to workspace 2:Web
- bindsym $mod+Shift+3 move container to workspace 3:Work
- bindsym $mod+Shift+4 move container to workspace 4:Work
- bindsym $mod+Shift+5 move container to workspace 5:Work
- bindsym $mod+Shift+6 move container to workspace 6:Work
- bindsym $mod+Shift+7 move container to workspace 7:Work
- bindsym $mod+Shift+8 move container to workspace 8:Other
- bindsym $mod+Shift+9 move container to workspace 9:Other
- bindsym $mod+Shift+0 move container to workspace 10:Other
- #===============指定程序打开后出现在指定工作区===============
- assign [class="chrome"] 2:Web
- # assign [class="idea"] 3:Dev
- # assign [class="VirtualBox"] 9:Other
- #===============重新加载配置===============
- # reload the configuration file
- bindsym $mod+Shift+c reload
- #===============重启i3===============
- # restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
- bindsym $mod+Shift+r restart
- #===============退出i3===============
- # exit i3 (logs you out of your X session)
- bindsym $mod+Shift+e exec "i3-nagbar -t warning -m '是否确定退出i3? 这将导致所有工作窗口被关闭.' -b '确定' 'i3-msg exit'"
- #===============调整窗口大小===============
- # resize window (you can also use the mouse for that)
- mode "resize" {
- # same bindings, but for the arrow keys
- bindsym Left resize shrink width 10 px or 10 ppt
- bindsym Down resize grow height 10 px or 10 ppt
- bindsym Up resize shrink height 10 px or 10 ppt
- bindsym Right resize grow width 10 px or 10 ppt
- # back to normal: Enter or Escape
- bindsym Return mode "default"
- bindsym Escape mode "default"
- }
- #===============绑定调整窗口大小快捷键===============
- bindsym $mod+r mode "resize"
- #===============开启i3时自启动项===============
- exec_always --no-startup-id feh --bg-fill path/to/background/image
- exec i3-config-wizard
- exec --no-startup-id i3-msg "workspace 1:Info"
- exec compton &
如果复制了我的配置文件,请修改path/to/background/image和path/to/lock/screen/wallpaper。
至此i3wm的配置已经弄好了,就是这么简单= = 关于i3wm的详细配置参考官方文档。
配置py3status
1. 执行yaourt py3status安装。
py3status的配置文件在~/.i3status中,在配置i3wm的时候我们已经在配置文件中启用了py3status,在这一部分只需要配置要启用的模块即可,所有支持的模块可以在这里找到。
2. 执行install noto-fonts-emoji安装Emoji字体。
以下是我py3status的配置文件:
- general {
- output_format = "i3bar"
- colors = true
- color_good = "#BBBBBB"
- color_bad = "#CC1616"
- color_degraded = "#55858E"
- interval = 1
- }
- order += "sysdata"
- order += "cpu_usage"
- order += "cpu_temperature 0"
- order += "net_rate"
- order += "imap"
- order += "time"
- order += "volume_status"
- order += "static_string screenshot"
- order += "dpms"
- sysdata {
- format = " {mem_used}G {mem_used_percent}%"
- color = "#48CCCD"
- }
- cpu_usage {
- format = " %usage"
- color = "#52D017"
- }
- cpu_temperature 0 {
- format = " %degrees °C"
- max_threshold = 65
- path = "/sys/class/thermal/thermal_zone0/temp"
- color = "#CCFB5D"
- }
- net_rate {
- interfaces = "enp0s25"
- format = "{down} {up}"
- color = "#FFDB58"
- }
- imap {
- cache_timeout = 60
- format = " {unseen}"
- imap_server = 'imap.gmail.com'
- mailbox = 'INBOX'
- name = 'you/name'
- password = 'you/mail/password'
- port = '993'
- user = 'your/mail'
- new_mail_color = "#F87431#F62217"
- on_click 1 = 'exec google-chrome-stable https://mail.google.com/mail'
- color = "#FCDFFF"
- }
- time {
- format = " %Y-%m-%d %H:%M:%S"
- color = "#9E7BFF"
- }
- volume_status {
- format = " {percentage}%"
- cache_timeout = 1
- device = "default"
- thresholds = [
- (0, "#A0CFEC"),
- (10, "#82CAFF"),
- (20, "#79BAEC"),
- (30, "#3BB9FF"),
- (40, "#56A5EC"),
- (50, "#5CB3FF"),
- (60, "#1589FF"),
- (70, "#157DEC"),
- (80, "#306EFF"),
- (90, "#2B65EC")
- ]
- }
- static_string 'screenshot' {
- format = ""
- on_click 1 = "exec gnome-screenshot"
- color = "#C44975"
- }
- dpms {
- format_on = " DPMS"
- format_off = " DPMS"
- color_on = "#F9B7FF"
- color_off = "#6B9299"
- }
- 我的配置文件中使用了imap模块,需要配置邮箱相关的信息。
- volume_status模块需要安装pamixer和alsa-utils。
- 不同的Emoji字体会造成状态栏的图标不一样,我截图中使用的是nodejs-emojione,这里的配置使用的是 noto-fonts-emoji,因为觉得后者 比较好看= =。
配置LilyTerm
执行install lilyterm安装终端模拟器。
LilyTerm的配置文件在/etc/lilyterm.conf, 不过不建议直接修改配置文件,可以在启动i3wm后打开终端,在终端上右键即可进行可视化配置。字体我使用的Source Code Pro+Noto Sans CJK SC
配置xinit
执行vim ~/.xinitrx编辑xinit配置文件, 这一步的配置关系到i3wm的启动和搜狗输入法的使用,将内容修改如下:
- export LANG=zh_CN.UTF-8
- export LANGUAGE=zh_CN:en_US
- export LC_CTYPE=en_US.UTF-8
- export GTK_IM_MODULE=fcitx
- export QT_IM_MODULE=fcitx
- export [email protected]=fcitx
- exec i3
- exec sogou-qimpanel
修改完成后执行startx就会发现桌面环境启动成功了。
执行vim ~/.zshrc,在文件底部加入这一行[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx,这样以后登陆系统后会自动运行startx登陆到桌面中。
搜狗输入法
在桌面环境下打开一个终端(win+回车),执行install fcitx-im fcitx-configtool fcitx-sogoupinyin安装fcitx套件和搜狗输入法。
安装完成后右击状态栏最右侧的小键盘,在设置中添加搜狗输入法,然后重启系统,就会发现输入法可以使用了,输入法的切换默认按键为ctrl+space。
Chrome
执行install google-chrome安装Chrome浏览器,安装完成后按win+d调出dmenu,输入chrome回车,即可运行Chrome。
资源管理器
执行install nautilus安装gnome的资源管理器,安装完成后可以通过win+e打开。
为了能够让nautilus识别安卓手机,需要执行install gvfs-mtp来支持MTP。
安装PDF阅读器
执行install foxitreader安装福昕PDF阅读软件, 安装完成后按win+d调出dmenu,输入foxitreader回车,即可运行foxitreader。
截屏
执行install gnome-screenshot安装gnome的截屏软件,安装完成后点击状态栏中的截屏按钮就会自动截屏。
执行yaourt shutter可以安装功能强大的截图软件shutter,安装完成后按win+d调出dmenu,输入shutter回车,即可运行shutter。
WPS
执行install wps-office安装wps套件,虽然绝大多数时候我都会在虚拟机下开windows编辑文档,但是只是查看的话还是很方便的。
翻译:ydcv
执行install ydcv安装ydcv,通过它再配scratchpad功能,在简单翻译的情境下比任何翻译工具都要好用。
结尾
做到这里差不多桌面环境都搭建好了,笔者是实体机上边安装边写的文章,大体上不会有什么问题,如果安装过程中有疑问或者不对的地方欢迎提出讨论。