×

配置你的专属Manjaro-i3wm

96
MrJiRen
2017.07.28 19:28* 字数 1156

用了将一个月Manjaro-i3wm,觉得是时候写篇简单的教程了。用一句话来概括自己的感受,就是刚安装的时候很折腾,后面使用起来很顺手。折腾是因为i3wm是一个平铺式桌面管理器(如果你不太了解i3wm和你正在使用的桌面的区别,请自行百度),后面很顺手是因为i3wm所有的配置都可以由自己的心意来修改。不过Manjaro-i3wm完全可以达到开箱即用,再加上Manjaro是基于Arch,跟新的速度要稍慢于Arch,所以稳定性方面要比Arch好很多。

image.png
image.png

一、搜狗输入法

  • 安装搜狗输入法
sudo pacman -S fcitx-im # 全部安装
sudo pacman -S fcitx-configtool # 图形化配置工具
  • 在~/.xprofile文件里面添加下面三行
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

二、URxvt的配置

!!$HOME/.Xresources
URxvt.preeditType:Root

! default input method
URxvt.inputMethod:fcitx

! color setup
URxvt.depth:32

URxvt.inheritPixmap:true
URxvt.background:#282A36
URxvt.foreground:#F8F8F2
URxvt.colorBD:Gray95
URxvt.colorUL:Green
URxvt.color1:Red2
URxvt.color4:RoyalBlue
URxvt.color5:Magenta2
URxvt.color8:Gray50
URxvt.color10:Green2
URxvt.color12:DodgerBlue
URxvt.color14:Cyan2
URxvt.color15:Gray95

! default web brower
URxvt.urlLauncher:/usr/bin/google-chrome-stable
URxvt.matcher.button:1
Urxvt.perl-ext-common:matcher

! scroll bar setting
URxvt.scrollBar:False
URxvt.scrollBar_floating:False
URxvt.scrollstyle:plain

! scroll screen setting
URxvt.mouseWheelScrollPage:True
URxvt.scrollTtyOutput:False
URxvt.scrollWithBuffer:True
URxvt.scrollTtyKeypress:True

! cursor splash
URxvt.cursorBlink:True
URxvt.saveLines:3000

! border setting
URxvt.borderLess:False

! font setting 这里的字体系统中一定要已经安装
URxvt.font:xft:Droid\ Sans\ Mono\ For\ Powerline:regular:size=10,xft:WenQuanYi Micro Hei Mono:regular:size=13:minispace=true
image.png

三、让软件自动归类到Workspace下

所谓自动归类,拿Terminal举例,不管你在哪一个工作区按下了打开终端的快捷键,Terminal都会在你指定的工作区内打开。这样做的好处是,你可以把多个终端集中到一个workspace里面。那么这功能到底如何实现呢?
首先你得知晓一点,关于i3wm所有的配置都是在~/.i3/config文件里面。打开配置文件之后,你会发现里面有很多预定的配置,实现上面的功能你需要做以下的几步:

  • 为workspace绑定快捷键mod+1,并定义变量名ws1

bindsym $mod+1 workspace $ws1

  • 在特定的workspace里面打开应用,这里我使用的终端是URxvt

assign [class="URxvt"] $ws1

我的~/.i3/config配置文件如下:

# i3 config file (v4)
# Please see http://i3wm.org/docs/userguide.html for a complete reference!

# Set mod key (Mod1=<Alt>, Mod4=<Super>)
set $mod Mod4

# set default desktop layout (default is tiling)
# workspace_layout tabbed <stacking|tabbed>

# Configure border style <normal|1pixel|pixel xx|none|pixel>
new_window pixel 1
new_float normal

# Hide borders
hide_edge_borders none

# change borders
bindsym $mod+u border none
bindsym $mod+y border pixel 1
bindsym $mod+n border normal

# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font xft:Noto Sans 10

# Use Mouse+$mod to drag floating windows
floating_modifier $mod

# start a terminal
bindsym $mod+Return exec terminal

# kill focused window
bindsym $mod+Shift+q kill

# start program launcher
# bindsym $mod+d exec --no-startup-id dmenu_recency
# launch rofi
bindsym $mod+d exec rofi -show run

# launch categorized menu
bindsym $mod+z exec --no-startup-id morc_menu


################################################################################################
## sound-section - DO NOT EDIT if you wish to automatically upgrade Alsa -> Pulseaudio later! ##
################################################################################################

#exec --no-startup-id volumeicon
#bindsym $mod+Ctrl+m exec terminal -e 'alsamixer'
exec --no-startup-id pulseaudio
exec --no-startup-id pa-applet
bindsym $mod+Ctrl+m exec pavucontrol

################################################################################################

# Screen brightness controls
# bindsym XF86MonBrightnessUp exec "xbacklight -inc 10; notify-send 'brightness up'"
# bindsym XF86MonBrightnessDown exec "xbacklight -dec 10; notify-send 'brightness down'"

# Start Applications
bindsym $mod+Ctrl+b exec terminal -e 'bmenu'
bindsym $mod+F2 exec firefox
bindsym $mod+F3 exec pcmanfm
# bindsym $mod+F3 exec ranger
bindsym $mod+Shift+F3 exec gksu pcmanfm
bindsym $mod+F5 exec terminal -e 'mocp'
bindsym $mod+t exec --no-startup-id pkill compton
bindsym $mod+Ctrl+t exec --no-startup-id compton -b
bindsym $mod+Shift+d --release exec "killall dunst; exec notify-send 'restart dunst'"
# bindsym Print exec --no-startup-id i3-scrot
bindsym $mod+c exec --no-startup-id deepin-screenshot
bindsym $mod+Print --release exec --no-startup-id i3-scrot -w
bindsym $mod+Shift+Print --release exec --no-startup-id i3-scrot -s
bindsym $mod+Shift+h exec xdg-open /usr/share/doc/manjaro/i3_help.pdf
bindsym $mod+Ctrl+x --release exec --no-startup-id xkill

# focus_follows_mouse no

# change focus
bindsym $mod+l focus left
bindsym $mod+k focus down
bindsym $mod+i focus up
bindsym $mod+j 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+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+odiaeresis 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

# workspace back and forth (with/without active container)
workspace_auto_back_and_forth yes
bindsym $mod+b workspace back_and_forth
bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth

# split orientation
bindsym $mod+h split h;exec notify-send 'tile horizontally'
bindsym $mod+v split v;exec notify-send 'tile vertically'
bindsym $mod+q split toggle

# toggle fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle

# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split

# toggle tiling / floating
bindsym $mod+Shift+space floating toggle

# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle

# toggle sticky
bindsym $mod+Shift+s sticky toggle

# focus the parent container
bindsym $mod+a focus parent

# move the currently focused window to the scratchpad
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 $mod+minus scratchpad show

#navigate workspaces next / previous
bindsym $mod+Ctrl+Right workspace next
bindsym $mod+Ctrl+Left workspace prev

# Workspace names
# to display names or symbols instead of plain workspace numbers you can use
# something like: set $ws1 1:mail
#                 set $ws2 2:
set $ws1 "Terminal "
set $ws2 "Chrome "
set $ws3 "Androidstudio "
set $ws4 "Video "
set $ws5 5
set $ws6 6
set $ws7 7
set $ws8 8


# switch to workspace
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8

# Move focused container to workspace
bindsym $mod+Ctrl+1 move container to workspace $ws1
bindsym $mod+Ctrl+2 move container to workspace $ws2
bindsym $mod+Ctrl+3 move container to workspace $ws3
bindsym $mod+Ctrl+4 move container to workspace $ws4
bindsym $mod+Ctrl+5 move container to workspace $ws5
bindsym $mod+Ctrl+6 move container to workspace $ws6
bindsym $mod+Ctrl+7 move container to workspace $ws7
bindsym $mod+Ctrl+8 move container to workspace $ws8

# Move to workspace with focused container
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8

# Open applications on specific workspaces
assign [class="URxvt"] $ws1
assign [class="Google-chrome"] $ws2
assign [class="jetbrains-studio"] $ws3
# assign [class="Skype"] $ws5

# Open specific applications in floating mode
for_window [title="alsamixer"] floating enable border pixel 1
for_window [class="Calamares"] floating enable border normal
for_window [class="Clipgrab"] floating enable
for_window [title="File Transfer*"] floating enable
for_window [class="Galculator"] floating enable border pixel 1
for_window [class="GParted"] floating enable border normal
for_window [title="i3_help"] floating enable sticky enable border normal
for_window [class="Lightdm-gtk-greeter-settings"] floating enable
for_window [class="Lxappearance"] floating enable sticky enable border normal
for_window [class="Manjaro-hello"] floating enable
for_window [class="Manjaro Settings Manager"] floating enable border normal
for_window [title="MuseScore: Play Panel"] floating enable
for_window [class="Nitrogen"] floating enable sticky enable border normal
for_window [class="Oblogout"] fullscreen enable
for_window [class="octopi"] floating enable
for_window [title="About Mozilla Firefox"] floating enable
for_window [class="Pamac-manager"] floating enable
for_window [class="Pavucontrol"] floating enable
for_window [class="qt5ct"] floating enable sticky enable border normal
for_window [class="Qtconfig-qt4"] floating enable sticky enable border normal
for_window [class="Simple-scan"] floating enable border normal
for_window [class="(?i)System-config-printer.py"] floating enable border normal
for_window [class="Skype"] floating enable border normal for_window [class="Thus"] floating enable border normal for_window [class="Timeset-gui"] floating enable border normal
for_window [class="(?i)virtualbox"] floating enable border normal
for_window [class="Xfburn"] floating enable

# switch to workspace with urgent window automatically
for_window [urgent=latest] focus

# reload the configuration file
bindsym $mod+Shift+c reload

# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart

# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"

# Set shut down, restart and locking features
bindsym $mod+0 mode "$mode_system"
set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
mode "$mode_system" {
    bindsym l exec --no-startup-id i3exit lock, mode "default"
    bindsym s exec --no-startup-id i3exit suspend, mode "default"
    bindsym u exec --no-startup-id i3exit switch_user, mode "default"
    bindsym e exec --no-startup-id i3exit logout, mode "default"
    bindsym h exec --no-startup-id i3exit hibernate, mode "default"
    bindsym r exec --no-startup-id i3exit reboot, mode "default"
    bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"

    # exit system mode: "Enter" or "Escape"
    bindsym Return mode "default"
    bindsym Escape mode "default"
}

# Resize window (you can also use the mouse for that)
bindsym $mod+r mode "resize"
mode "resize" {
        # These bindings trigger as soon as you enter the resize mode
        # Pressing left will shrink the window’s width.
        # Pressing right will grow the window’s width.
        # Pressing up will shrink the window’s height.
        # Pressing down will grow the window’s height.
        bindsym j resize shrink width 5 px or 5 ppt
        bindsym k resize grow height 5 px or 5 ppt
        bindsym l resize shrink height 5 px or 5 ppt
        bindsym odiaeresis resize grow width 5 px or 5 ppt

        # 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

        # exit resize mode: Enter or Escape
        bindsym Return mode "default"
        bindsym Escape mode "default"
}

# Lock screen
bindsym $mod+9 exec --no-startup-id blurlock

# Autostart applications
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec --no-startup-id nitrogen --restore; sleep 1; compton -b
#exec --no-startup-id manjaro-hello
exec --no-startup-id nm-applet
exec --no-startup-id xfce4-power-manager
exec --no-startup-id pamac-tray
exec --no-startup-id clipit
# exec --no-startup-id blueman
# exec_always --no-startup-id sbxkb
exec --no-startup-id start_conky_maia
# exec --no-startup-id start_conky_green
exec --no-startup-id xautolock -time 10 -locker blurlock
exec_always --no-startup-id fix_xcursor

# Start i3bar to display a workspace bar (plus the system information i3status if available)
bar {
    status_command i3status
    position bottom

## please set your primary output first. Example: 'xrandr --output eDP1 --primary'
#   tray_output primary
#   tray_output eDP1

    bindsym button4 nop
    bindsym button5 nop
    font xft:Noto Sans 10.5
    strip_workspace_numbers yes

    colors {
#       background $transparent
        background #2B2C2B
        statusline #F9FAF9
        separator  #454947

#                                  border  backgr. text
        focused_workspace  #F9FAF9 #16A085 #2B2C2B
        active_workspace   #595B5B #353836 #FDF6E3
        inactive_workspace #595B5B #353836 #EEE8D5
        urgent_workspace   #16A085 #FDF6E3 #E5201D
    }
}

# hide/unhide i3status bar
bindsym $mod+m bar mode toggle

# Theme colors
# class                 border  backgr. text    indic.  child_border
client.focused          #808280 #808280 #80FFF9 #FDF6E3
client.focused_inactive #434745 #434745 #16A085 #454948
client.unfocused        #434745 #434745 #16A085 #454948
client.urgent           #CB4B16 #FDF6E3 #16A085 #268BD2
client.placeholder      #000000 #0c0c0c #ffffff #000000 #0c0c0c

client.background       #2B2C2B

#############################
### settings for i3-gaps: ###
#############################

# Set inner/outer gaps
# gaps inner 10
gaps inner 6
gaps outer -4

# Additionally, you can issue commands with the following syntax. This is useful to bind keys to changing the gap size.
# gaps inner|outer current|all set|plus|minus <px>
# gaps inner all set 10
# gaps outer all plus 5

# Smart gaps (gaps used if only more than one container on the workspace)
smart_gaps on

# Smart borders (draw borders around container only if it is not the only container on this workspace)
# on|no_gaps (on=always activate and no_gaps=only activate if the gap size to the edge of the screen is 0)
smart_borders on

# Press $mod+Shift+g to enter the gap mode. Choose o or i for modifying outer/inner gaps. Press one of + / - (in-/decrement for current workspace) or 0 (remove gaps for current workspace). If you also press Shift with these keys, the change will be global for all workspaces.
set $mode_gaps Gaps: (o) outer, (i) inner
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
bindsym $mod+Shift+g mode "$mode_gaps"

mode "$mode_gaps" {
        bindsym o      mode "$mode_gaps_outer"
        bindsym i      mode "$mode_gaps_inner"
        bindsym Return mode "default"
        bindsym Escape mode "default"
}
mode "$mode_gaps_inner" {
        bindsym plus  gaps inner current plus 5
        bindsym minus gaps inner current minus 5
        bindsym 0     gaps inner current set 0

        bindsym Shift+plus  gaps inner all plus 5
        bindsym Shift+minus gaps inner all minus 5
        bindsym Shift+0     gaps inner all set 0

        bindsym Return mode "default"
        bindsym Escape mode "default"
}
mode "$mode_gaps_outer" {
        bindsym plus  gaps outer current plus 5
        bindsym minus gaps outer current minus 5
        bindsym 0     gaps outer current set 0

        bindsym Shift+plus  gaps outer all plus 5
        bindsym Shift+minus gaps outer all minus 5
        bindsym Shift+0     gaps outer all set 0

        bindsym Return mode "default"
        bindsym Escape mode "default"
}

# autostart program
# exec xrandr --output HDMI2 --off --output HDMI1 --mode 1920x1080 --pos 0x0 --rotate normal --output DP1 --off --output eDP1 --off --output VIRTUAL1 --off
# exec_always urxvt
# exec_always fcitx
# exec_always fluxgui

四、科学上网

关于科学上网可以参考我配置你的专属Deepin文章或者Github上Gnome-configuration-of-OS-X-style配置,上面也提及了关于科学上网的问题。在i3wm里面科学上网稍微有些不同的是,全局上网很麻烦,所以我一般都是在Chrome或者Firefox上面安装一个插件——Foxproxy,像下面那样配置一下就可以科学上网了

image.png

五、配置Rofi

安装完Rofi之后可能需要一下简单的配置,下面是我的配置。

  • 绑定启动rofi的快捷键

bindsym $mod+d exec rofi -show run

  • 在~/.extend.Xresources里面加入rofi的颜色配置
! ------------------------------------------------------------------------------
! ROFI Color theme
! ------------------------------------------------------------------------------
rofi.color-enabled: true
rofi.color-window: #393939, #393939, #268bd2
rofi.color-normal: #393939, #ffffff, #393939, #268bd2, #ffffff
rofi.color-active: #393939, #268bd2, #393939, #268bd2, #205171
rofi.color-urgent: #393939, #f3843d, #393939, #268bd2, #ffc39c
2017-07-28-183802_1206x600_scrot.png

六、即时聊天工具——wechat

Github上electronic-wechat开源项目(据说比腾讯官方开发的要好-)

image.png

七、虚拟机

如果你想要在i3wm上安装虚拟机的话,建议kvm-qemu。因为Virtualbox和VMware Workstation在上面使用貌似都会有一些问题(这是血的教训)。用virt-manager来控制qemu模拟器。个人感觉kvm-qemu貌似更加流畅。下面是虚拟机的增强工具spice-guest-tools。
spice-guest-tools

image.png

八、Androidstudio、Intellij IDEA Ultimate Editon、Pycharm、Genymotion

这些软件都可以一条指令安装,不过我在使用Intellij IDEA Ultimate Edition我发现输入中文会乱码,解决的办法就是把YaHei Consolas Hybrid设置为Intellij IDEA Ultimate Edition的默认字体。Genymotion的安装需要一些其他相关的包,所以建议去找篇安装教程,如果你已经解决了科学上网问题,可以到Youtube上找安装教程。

九、护眼软件xflux-gui-git

安装话的直接一个指令就可以解决。不得不感叹,Arch上面安装软件真是太方面,软件库里面真是一应俱全。

十、总结

本篇文章只是浅尝辄止的讲解了一下配置过程,如果有什么错误,欢迎指正。使用i3wm的时候基本上就是完全靠快捷键,普通人拿到我的电脑连关机都没办法,更别谈操作了,但是其实常用的指令学会了之后,操作起来也没什么难度。再次重申,如果你一点都不爱折腾的话,不建议尝试,因为这中间你会被迫去了解很多的新知识。如果你喜欢一个定制化的系统,那么你可以使用i3wm,但是如果你喜欢大众化一点的系统,你还是跟随主流比较好,因为这个桌面管理器对于你而言可能稍显复杂,而且学习的曲线比较陡。

我的写作
Web note ad 1