Опять же статья из разряда открытий :)

Мне "повезло" быть счастливым обладателем чахлого ноутбука - 8 гб оперативки и SSD, работающий быстрее нативных портиков SATA-2.0 конечно улучшают ситуацию, но полностью не спасают ("отца русской демократии" :) . От классической Ubuntu (в то время - 12.04) пришлось отказаться сразу - unity уж очень большая нагрузка на процессор.

Изначальная Windows 7 "для домашнего пользователя" - это, естественно, не вариант, ибо даже на нём ATi-шные драйвера несколько глючили (иногда было дрожание картинки с дальнейшим переходом в BSOD). Решено было поставить Linux. Соответственно, сказано-сделано. На ноутбуке попеременно поселялись CentOS, разные вариации на тему ubuntu, в т.ч. MINT, WattOS итд, даже NetBSD. Но у всех был и свои недостатки - то набор софта, что называется "прибит гвоздями", точнее, программы собраны с определёнными зависимостями и используют... скажем так - не тот набор библиотек :) то сам софт собран как-то криво, словом - не всё ладно в королевстве датском. В результате всех мытарств я остановился на Slackware 14.1, тем более что я начинал с него свой опыт в ИТ. Что мне в нём всегда нравилось - это простота и скорость работы :) ну и простой формат пэкэджей. С другой стороны, в отличие от Gentoo, где всё собирается и сорсов в принципе и Arch-ика, где сход с дефолтного набора бинарных пакетов фактически означает, что придётся собирать пол-дистрибутива в своём AUR-е. С другой стороны неохота, чтобы в системе стояли "лишние" пакеты. Ну и есть некоторые соображения по поводу, например, systemd.

Вобщем, так или иначе на машинку был водружён Slackware без KDE. Из приличных stacked менеджеров рабочего стола/окон была задействована связка <a title="Статья из русской ArchWiki - Openbox+Xfce4" href="https://wiki.archlinux.org/index.php/Openbox_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29#Xfce4" target="_blank">Openbox+XFce4</a>. К слову сказать от openbox в данном случае в принципе прок есть, в некоторых моментах даже заметный :) . НО, тем не менее в моём случае этого не совсем было достаточно, хотелось несколько удобнее и быстрее.

Соответственно, ключевое слово было "быстрее". И вот меня посетила некоторая мысль - есть же тайловые ВМ, я и так пользуюсь 6-8 рабочими столами, большинство приложений разворачиваю на весь стол, соответственно, границы окон мне по большому счёту не нужны. Я обратился вначале к openbox (это всё-таки классический ВМ), понял что в итоге мне двигать окна почти не нужно, почти.

Таким образом Ratpoison мне совсем не подходит, он не умеет плавающих окон. Из приличных остаются awesome, i3, dwm. Самый-самый из них - это awesome, но "божественный конфиг на Lua" - это какбэ совсем уж мудрёно, ну его нафиг. Некоторое время я просидел на модифицированном dwm, очень удобно, при таком размере бинаря, при такой скорости фукционал у него довольно приличный, но нативного трея нет, а городить всякие панельки типа tint что-то как-то было влом. Соответственно, я взял на заметку i3, тем более как раз вышла новая его версия - 4.8.

Соответственно, я раздобыл этот самый i3. У него есть системный трей - то что нужно! Конфиг, в общем случае, простой, основная идея - это <a href="http://slackbuilds.org/repository/14.1/desktop/dmenu/" target="_blank">dmenu</a> и горячие клавиши. Не хватало всего лишь приложений, размещённых в системном трее - это nm-applet (уже есть в дистрибутиве), <a href="http://slackbuilds.org/repository/14.1/desktop/parcellite/?search=parcellite" target="_blank">parcellite</a>, <a href="http://slackbuilds.org/repository/14.1/audio/volumeicon/?search=volumeicon" target="_blank">volumeicon</a>.

P.S. по традиции привожу свой конфиг i3 и i3status

set $mod Mod4

font pango:Terminus 10

# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod

# start a terminal
bindsym $mod+Return exec i3-sensible-terminal

# kill focused window
bindsym $mod+q kill

# start dmenu (a program launcher)
bindsym $mod+d exec dmenu_run
bindsym $mod+r exec dmenu_run

# Window focus moving
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

# Window moving 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

# split in horizontal orientation
bindsym $mod+h split h

# split in vertical orientation
bindsym $mod+v split v

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

# 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

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

# focus the child container
#bindsym $mod+d focus child

# switch to workspace
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3
bindsym $mod+Shift+4 move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10

# 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'"

# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
    position top
    strip_workspace_numbers no
    workspace_buttons yes
    binding_mode_indicator yes
        status_command ~/.i3/i3status
}

new_window 1pixel

# Terminal
bindsym $mod+t exec urxvt
assign [class="^Lilyterm$" instance="^lilyterm$"] 2
assign [class="^URxvt$" instance="^urxvt$"] 2

# Browser 1
bindsym $mod+o exec opera
assign [class="^Opera$" instance="^opera$"] 6

# IRC
bindsym $mod+Shift+h exec hexchat 
assign [class="^Hexchat$" instance="^hexchat$"] 8

# XMPP
bindsym $mod+Shift+g exec gajim
assign [class="^Gajim$" instance="^gajim$"] 9

# Browser 2
bindsym $mod+Shift+f exec firefox
assign [class="^Firefox$"] 7
for_window [class="Firefox" instance="Dialog"] floating enable
for_window [class="Firefox" instance="Extension"] floating enable
for_window [class="Firefox" instance="Abp"] floating enable
for_window [class="Firefox" instance="Febe"] floating enable

# Browser 3
assign [class="Chromium"] 5

# E-Mail
bindsym $mod+Shift+t exec thunderbird
assign [class="^Thunderbird$"] 5
for_window [class="Thunderbird" instance="Dialog"] floating enable
for_window [class="Thunderbird" instance="Extension"] floating enable

# Editor
bindsym $mod+Shift+a exec mousepad
assign [class="^Mousepad$" instance="^mousepad$"] 3

# Multi-proto IM
bindsym $mod+m exec pidgin
assign [class="^Pidgin$"] 9
for_window [class="^Pidgin$"] floating enable
for_window [class="^Pidgin$" window_role="^conversation$"] resize grow width 0 px or 30 ppt

# Screenshot prog.
bindsym Print exec xfce4-screenshooter
assign [class="^Xfce4\-screenshooter$" instance="^xfce4\-screenshooter$"] 1

assign [class="^GMPlayer$"] 4
for_window [class="^GMPlayer$"] floating enable
assign [class="^MPlayer$"] 4
for_window [class="^MPlayer$"] floating enable

for_window [class="Vlc"] floating enable
for_window [class="Xfce4-notifyd"] floating enable
for_window [class="Gimp"] floating enable
for_window [class="XFontsel"] floating enable
for_window [class="^orage$"] floating enable
for_window [class="^Orage$"] floating enable
for_window [class="Wine"] floating enable

exec --no-startup-id ~/.i3/ssh.sh &amp;
exec --no-startup-id fbsetbg /usr/share/wallpapers/slack-simplicity1-1024x768.png &amp;
exec --no-startup-id volumeicon &amp;
exec --no-startup-id nm-applet &amp;
#exec --no-startup-id xfsettingsd &amp;
exec --no-startup-id parcellite &amp;
exec --no-startup-id setxkbmap -layout en,ru -options terminate:ctrl_alt_bksp,grp:alt_shift_toggle,grp_led:scroll &amp;

i3status:

#!/usr/bin/perl

while(1){
    $str='';

# Language
    $str.="Lang:[";
    if(`xset -q`=~/Group 2:     on /o){
        $str.="RU]";
    }else{
        $str.="EN]";
    }

# Audio level
    open A, "/proc/asound/card3/codec#0"||die;
    seek A, 1051, 0;
    read A, $max, 4 || die;
    seek A, 1110, 0;
    read A, $cur, 4 || die;
    close A;

    $max = sprintf("%d", hex($max));
    $cur = sprintf("%d", hex($cur));

    if(int($cur / $max * 100) &lt; = 100){
        $str.= " | Vol:[".int($cur / $max * 100)."%]";
    }else{
        $str.= " | Vol:[off]";
    }

# Power supply / bat. charge level
    $str.=" | Power:[";
    open AC,"/sys/class/power_supply/ADP1/online";
    if(==1){
        $str.="AC";
    }else{
        $str.="DC";
    }

    close AC; # display % charge only if possible
    if (open DC,"/sys/class/power_supply/BAT0/capacity"){
    $str.=' '. ;
    close DC;
    chomp $str;
    $str .= '%';
    }
    $str .= "]";

# uptime
    open A, "/proc/uptime";
    $u = <a>;
    close A;
    $u = (split(/ /,$u))[0];
    $days = int($u / 86400); # 86400 = 1 day
    $hours = int(($u - (86400 * $days)) / 3600); # 3600 = 1 hour
    $minutes = int(($u - (86400 * $days) - (3600 * $hours)) / 60);
    $seconds = int($u - (86400 * $days) - (3600 * $hours) - (60 * $minutes));
    $uptime = sprintf(" | up:[%sd,%02sh,%02sm,%02ss]", $days, $hours, $minutes, $seconds);
    $str .= $uptime;

# LA
    open A, "/proc/loadavg";
    $la = </a><a>;
    close A;
    $la = (split(/ /, $la))[0];
    $str .= " | LA:[$la]";

# time
    ($sec, $min, $hour, $mday, $mon, $year, $wday) = (localtime)[0,1,2,3,4,5,6];
    @months = ('Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек');
    @wdays = ('Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб');
    $year = $year + 1900;

    $str .= sprintf(" | %s, %s %s %s %02s:%02s:%02s", $wdays[$wday], $mday, $months[$mon], $year, $hour, $min, $sec);

    $str .= " | $ENV{'USER'}";
    print "$str\n";

    sleep 15;
}
</a>

Next Post