I use cookies to analyze how visitors use my website via Google Analytics:
Related Index Debian
スペックがあまり潤沢ではない機材を使うため, 軽量な wm として i3 を使い始めた.
元々常にtmuxを全画面にして作業しているので, 「タイル型wmの恩恵を受けられるのか?」という疑問はあったのだが, 使ってみたら「綺麗」かつ「驚きの軽さ」ということで, すっかり気にいってしまった.
とりあえず現状では以下:
他にも
といった所はそのまま, かな?
設定ファイルは末尾に掲載している.
いわゆる GNOME や KDE といった Desktop 環境ではないので, たとえば xdg-open の挙動が変わります.
xdg-open
それ自体は問題無いのですが, 以下の様に
applications/*; xdg-open "%s" image/*; xdg-open %s; video/*; xdg-open %s;
~/.mailcap を xdg-open に丸投げしていて, さらに $DISPLAY (もしくは $WAYLAND_DISPLAY)が無い場合には, xdg-open が run-mailcap を呼ぶ→ run-mailcap が xdg-open を呼び, といった 無限ループが発生します. run-mailcapを抜けば良い, という話もありますが, これ=mime-support=パッケージで提供されているので, 抜くとpython が抜けて大変な目に会います
~/.mailcap
$DISPLAY
$WAYLAND_DISPLAY
run-mailcap
というわけで, 安直には xdg-open を修正すれば良いですね:
--- /usr/bin/xdg-open.orig 2015-10-06 04:19:48.000000000 +0900 +++ /usr/bin/xdg-open 2017-07-24 21:18:32.191564009 +0900 @@ -787,20 +787,9 @@ if [ -n "$DISPLAY" ]; then filetype=`xdg-mime query filetype "$file" | sed "s/;.*//"` open_generic_xdg_mime "$file" "$filetype" - fi - - if which run-mailcap 2>/dev/null 1>&2; then - run-mailcap --action=view "$file" - if [ $? -eq 0 ]; then - exit_success - fi - fi - - if [ -n "$DISPLAY" ] && mimeopen -v 2>/dev/null 1>&2; then - mimeopen -L -n "$file" - if [ $? -eq 0 ]; then - exit_success - fi + else + echo "can't handle: please set mime type via xdg-mime" + exit_failure_operation_failed fi fi
あと, ~/.local/share/applications/mimeapps.list から ~/.config/mimeapps.list へ symbolic link を作成しておきます.
~/.local/share/applications/mimeapps.list
~/.config/mimeapps.list
Rofi は良い感じのランチャ.
設定ファイルは ~/.config/rofi/config か ~/.Xresources で行なう. 今はこんな塩梅:
~/.config/rofi/config
~/.Xresources
! -*- mode:conf-xdefaults; coding: utf-8 -*- !! Rofi rofi.modi: run,window,,windowcd,drun,ssh rofi.combi-modi: windowcd,drun rofi.lines: 6 rofi.font: FSMRMP 24 rofi.bw: 2 rofi.location: 0 rofi.padding: 5 rofi.sidebar-mode: true rofi.hide-scrollbar: true rofi.fixed-num-lines: true rofi.kb-row-up: Up,Control+p,Shift+Tab,Alt+Tab rofi.kb-row-down: Down,Control+n rofi.kb-cancel: Escape,Control+g,Control+bracketleft,Control+c rofi.kb-mode-next: Shift+Right,Control+i,Control+Tab rofi.kb-mode-previous: Shift+Left,Control+Shift+i rofi.color-enabled: true rofi.color-window: #3a4c54, #2a373e, #c3c6c8 rofi.color-normal: #455a64, #fafbfc, #455a64, #00bcd4, #fafbfc rofi.color-active: #455a64, #00bcd4, #455a64, #009688, #fdf6e3 rofi.color-urgent: #455a64, #ff5252, #455a64, #ff5252, #fdf6e3
i3の方では Alt+Shift+Tab で呼び出せるようにしている:
bindsym $Alt+Shift+Tab $execi sh -c "rofi -show window"
Alt+Tab は https://github.com/yoshimoto/i3-alt-tab.py をありがたく使わせて貰っている.
i3barは背景透過した上で,
だけ.
status ラインは以下の通り
# status bar bar { output eDP1 position top tray_output eDP1 tray_padding -4 font xft:Inconsolata,Xft:FontAwesome 18 i3bar_command i3bar --transparency status_command i3status -c $HOME/.config/i3/i3status.conf binding_mode_indicator yes colors { background #02020200 statusline #F6F3E8 separator #111822 focused_workspace #111822 #222244 #F6F3E8 active_workspace #555555 #555555 #F6F3E8 inactive_workspace #020202 #242424 #888888 urgent_workspace #A00000 #900000 #F6F3E8 binding_mode #A00000 #900000 #f6f3e8 } }
i3status は以下
general { colors = true interval = 1 output_format = i3bar markup ="pango" } order += "tztime local" tztime local { align = left min_width = "2020/12/31(木) 23:59:59" format = "%Y/%m/%d(%a) %H:%M:%S" } order += "battery all" battery all { align = left min_width = " 80.00%" format = "<span color='#ffbf7f'>%status %percentage</span>" status_unk = status_full = status_chr = status_bat = }
system load を表示させている.
-- -*- mode: lua; coding: utf-8 -*- conky.config = { --######################## -- Global config section # --######################## -- Update interval in seconds update_interval = 1, -- This is the number of times Conky will update before quitting -- (0: unlimited) total_run_times = 0, -- number of net samples to average (1: disable averaging) net_avg_samples = 1, -- number of cpu samples to average (1: disable averaging) cpu_avg_samples = 1, imlib_cache_size = 0, -- Use double buffering (reduces flicker, may not work for everyone) double_buffer = true, -- Subtract file system buffers from used memory? no_buffers = true, --################ -- Text settings # --################ -- Force UTF8? note that UTF8 support required XFT override_utf8_locale = true, use_xft = true, font = 'FSMRMP:style=Bold:size=4', -- use_xft = false, -- font='-shinonome-gothic-medium-r-normal--14-130-75-75-c-70-iso8859-1', --################## -- Window settings # --################## -- Create own window instead of using desktop (required in nautilus) own_window_class = 'conky', own_window = true, own_window_type = 'override', own_window_transparent = true, own_window_hints = 'undecorated,below,sticky,skip_pager,skip_taskbar', -- Text alignment, other possible values are commented top_left, -- top_right, top_middle, bottom_left, bottom_right, bottom_middle, -- middle_left, middle_middle, middle_right, or none (also can be -- abreviated as tl, tr, tm, bl, br, bm, ml, mm, mr) alignment = 'tl', -- Gap between borders of screen and text -- same thing as passing -x at command line gap_x = 200, gap_y = 0, -- Minimum size of text area minimum_width = 1440, maximum_width = 1440, --#################### -- Graphics settings # --#################### default_bar_width = 0, default_bar_height = 0, -- Draw shades? draw_shades = false, -- Draw outlines? draw_outline = false, -- Draw borders around text draw_borders = false, draw_graph_borders = true, default_color = '#ffffff', -- default_shade_color = '#242424', }; conky.text = [[ ${font FSMRMP:size=16.5}${color #f09000}CPU${color}: ${cpu cpu0}%${font}\ ${voffset 8}\ ${goto 0}${color #ff0000}${cpubar cpu1 8,24} ${cpubar cpu3 8,24}${color}\ ${goto 54}${color #ff0000}${cpubar cpu2 8,24} ${cpubar cpu4 8,24}${color}\ ${voffset -20}\ ${goto 108}${color 888888}${cpugraph cpu0 28,50 ff0000 ff0000}${color}\ ${goto 164}\ ${voffset -2}\ ${font FSMRMP:size=16.5}${color #f09000}RAM${color}: $memperc%${font}\ ${voffset 9}\ ${goto 164}\ ${color #0000ff}${membar 8,85}${color}\ ${voffset -20}\ ${goto 256}${color 888888}${memgraph 28,50 0000ff 0000ff}${color}\ ${voffset -2}\ ${goto 310}\ ${font FSMRMP:size=16.5}${color #f09000}DISK${color}: ${fs_used_perc /}%${font}\ ${voffset 9}\ ${goto 310}${color #aaaaaa}${fs_bar 8,95 /}${color}\ ${voffset -20}\ ${goto 413}\ ${color 888888}${diskiograph_read /dev/dm-0 28,50 FCAF3E FCAF3E} \ ${color 888888}${diskiograph_write /dev/dm-0 28,50 FFFF4C FFFF4C}\ ${if_existing /proc/net/route tun0}\ ${voffset -2}\ ${goto 520}\ ${font FSMRMP:size=13.5}${color #4cff4c} VPN${color}${font}\ ${voffset 4}\ ${goto 520}\ ${font FSMRMP:size=15}${color #ffffff}${addr tun0}${font}${color}\ ${voffset -24}\ ${goto 675}\ ${color 888888}\ ${upspeedgraph wlp2s0 28,50 4CFFFF 7FFFFF} \ ${downspeedgraph wlp2s0 28,50 4CFF4C 7FFF7F}${color}\ ${else}\ ${if_existing /proc/net/route wlp2s0}\ ${voffset -2}\ ${goto 520}\ ${font FSMRMP:size=13.5}${color #4cff4c} Wifi${color}${font}\ ${voffset 4}\ ${goto 520}\ ${font FSMRMP:size=15}${color #ffffff}${addr wlp2s0}${font}${color}\ ${voffset -24}\ ${goto 675}\ ${color 888888}\ ${upspeedgraph wlp2s0 28,50 4CFFFF 4CFFFF} \ ${downspeedgraph wlp2s0 28,50 4CFF4C 4CFF4C}${color}\ ${else}\ ${if_existing /proc/net/route enp0s31f6}\ ${voffset -2}\ ${goto 520}\ ${font FSMRMP:size=13.5}${color #4cff4c} LAN${color}${font}\ ${voffset 4}\ ${goto 520}\ ${font FSMRMP:size=15}${color #ffffff}${addr enp0s31f6}${font}${color}\ ${voffset -24}\ ${goto 675}\ ${color 888888}\ ${upspeedgraph enp0s31f6 28,50 4CFFFF 4CFFFF} \ ${downspeedgraph enp0s31f6 28,50 4CFF4C 4CFF4C}${color}\ ${else}\ ${voffset -2}\ ${goto 520}\ ${font FSMRMP:size=13.5}${color #aaaaaa} --- ${color}${font}\ ${voffset 4}\ ${goto 520}\ ${font FSMRMP:size=15}${color #aaaaaa}---.---.---.---${color}${font}\ ${endif}${endif}${endif} ]];
suspend → resume した時に i3lock を走らせたいので /etc/systemd/system/i3lock.service:
/etc/systemd/system/i3lock.service
[Unit] Description=Starts i3lock at suspend time After=sleep.target [Service] User=uwabami Type=forking Environment=DISPLAY=:0 ExecStart=/usr/bin/i3lock -p win -c 444444 [Install] WantedBy=sleep.target
を作成して有効にしておく.
設定ファイル全体は以下の通り
#-*- mode:conf-space ; coding: utf-8 -*- # macro set $mod Mod4 set $Alt Mod1 set $execi exec --no-startup-id # set $execa exec_always # set $execai exec_always --no-startup-id # font font xft:FSMRMP 16.5 # startup #$execi /usr/libexec/gsd-xsettings --gtk-no-debug=All --gdk-no-debug=all $execi xrdb -merge $HOME/.Xresources $execi picom -bcCG $execi nm-applet $execi blueman-applet $execi /usr/libexec/gpaste/gpaste-daemon $execi feh --bg-fill $HOME/Pictures/desktop.png --image-bg black --no-fehbg $execi conky -c $HOME/.config/i3/conkyrc $execi nextcloud # screensaver and power management $execi xset -dpms # disable DPMS $execi xset s off # disable auto screensaver bindsym $mod+Shift+l $execi sh -c "i3lock -n -c 020202" # start a terminal: rxvt-unicide daemon mode bindsym Control+Shift+n exec urxvtcd # start launcher: rofi @see ~/.Xresources bindsym $Alt+F2 $execi sh -c "rofi -show run" # change focus bindsym $Alt+Tab $execi sh -c "rofi -show window" # set $i3t_alt_tab ~/.config/i3/i3-alt-tab.py # bindsym $Alt+Tab exec $i3t_alt_tab n all 2>&1 1>/dev/null # bindsym $Alt+Shift+Tab exec $i3t_alt_tab n 2>&1 1>/dev/null # change focus bindsym $mod+j focus left bindsym $mod+Control+Left focus left bindsym $mod+k focus right bindsym $mod+Control+Down focus down bindsym $mod+l focus down bindsym $mod+Control+Right focus right bindsym $mod+Control+Up focus Up # kill focused window bindsym $Alt+F4 kill # toggle tiling / floating bindsym $Alt+Return floating toggle # enter fullscreen mode for the focused container bindsym $mod+F12 fullscreen toggle # move focused window bindsym $mod+Left move left bindsym $mod+Down move down bindsym $mod+Up move up bindsym $mod+Right move right # change container layout (tabbed, stacked, toggle split) bindsym $mod+s layout stacking bindsym $mod+w layout tabbed bindsym $mod+t layout toggle split workspace_layout tabbed # focus the parent container bindsym $mod+a focus parent # focus the child container bindsym $mod+d focus child # 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 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" } # switch to workspace bindsym $Alt+1 workspace 1 bindsym $Alt+2 workspace 2 bindsym $Alt+3 workspace 3 bindsym $Alt+4 workspace 4 bindsym $Alt+5 workspace 5 bindsym $Alt+6 workspace 6 bindsym $Alt+7 workspace 7 bindsym $Alt+8 workspace 8 bindsym $Alt+9 workspace 9 bindsym $Alt+Control+Left workspace prev bindsym $Alt+Control+Right workspace next # move focused container to workspace bindsym $Alt+Shift+1 move container to workspace 1 bindsym $Alt+Shift+2 move container to workspace 2 bindsym $Alt+Shift+3 move container to workspace 3 bindsym $Alt+Shift+4 move container to workspace 4 bindsym $Alt+Shift+5 move container to workspace 5 bindsym $Alt+Shift+6 move container to workspace 6 bindsym $Alt+Shift+7 move container to workspace 7 bindsym $Alt+Shift+8 move container to workspace 8 bindsym $Alt+Shift+9 move container to workspace 9 # reload the configuration file bindsym $mod+Shift+c reload # restart i3 inplace bindsym $mod+Shift+r restart # exit # bindsym $mod+Shift+e exec i3-msg exit # media key bindsym XF86AudioRaiseVolume $execi pactl set-sink-volume 0 +5% bindsym XF86AudioLowerVolume $execi pactl set-sink-volume 0 -5% bindsym XF86AudioMute $execi pactl set-sink-mute 0 toggle bindsym XF86MonBrightnessUp $execi light -A 5 bindsym XF86MonBrightnessDown $execi light -U 5 # status bar bar { mode dock output eDP-1 position top tray_output eDP-1 tray_padding 0 font xft:FSMRMP 19.5 i3bar_command i3bar --transparency status_command i3status -c $HOME/.config/i3/i3status.conf binding_mode_indicator yes colors { background #02020200 statusline #F6F3E8 separator #111822 focused_workspace #111844 #222244 #F6F3E8 active_workspace #555555 #555555 #F6F3E8 inactive_workspace #020202 #242424 #888888 urgent_workspace #A00000 #900000 #F6F3E8 binding_mode #A00000 #900000 #f6f3e8 } } # class border bground text indicator child_border client.focused #111866 #333366 #F6F3E8 #2B2B2B #2B2B2B client.focused_inactive #020202 #242424 #F6F3E8 #2B2B2B #2B2B2B client.unfocused #020202 #242424 #F6F3E8 #2B2B2B #2B2B2B client.urgent #A00000 #900000 #F6F3E8 #2B2B2B #2B2B2B client.placeholder #000000 #0C0C0C #FFFFFF #000000 #0C0C0C # specific window settings for_window [window_role="pop-up"] floating enable for_window [window_role="task_dialog"] floating enable for_window [class="(?i)feh"] floating enable # for_window [class="(?i)vlc"] floating enable for_window [class="(?i)firefox"] floating enable for_window [class="(?i)zotero"] floating enable for_window [class="(?i)zooom"] floating enable for_window [class="(?i)teams"] floating enable for_window [class="(?i)slack"] floating enable for_window [class="(?i)ruby"] floating enable # startup assign [class="(?i)evince" ] 2 assign [class="(?i)nautilus" ] 2 assign [class="(?i)zotero" ] 2 assign [class="(?i)slack" ] 3 assign [class="(?i)firefox"] 4 assign [class="(?i)teams" ] 5 assign [class="(?i)remmina" ] 6 assign [class="(?i)zoom" ] 6