Pull to refresh

Comments 58

Тайлинг нужен был, когда один монитор: тогда приходилось держать в фокусе сразу несколько приложений. Сейчас, например, у меня 3 монитора и куда проще открывать все нужно в фулскрине. Поэтому, обхожусь гномом.
Но вообще тема интересная. В свое время, пользовался dwm+gentoo.
Чур не смеяться, но я с помощью тайлинга собираю себе вказиудобные псевдо-IDE:

1) Сверху-слева несколько vim во вкладках для редактирования кода (когда же я освою табы в нем!), справа-сверху консоль для вывода результатов эксперимента, снизу консоль сборки и правки файлов с настройками эксперимента.

2) слева evince с готовой pdf, справа vim для редактирования tex и консоль для сборки tex в pdf снизу.

И это не тормозит на нетбуке в отличие от Eclipse или Kile.
Расставляешь окна по своим местам руками каждый раз? Или скрипт какой используешь?
Расставляю пока вручную. Хотя надо и правда скрипт написать
А знаешь как программно манипулировать окнами в i3wm? Мне это очень надо, но пока не нашел как…
Насколько я понял из видео с GoogleTechTalks, можно получить управление с помощью i3wm.org/docs/ipc.html

Также он говорил про управление из консоли через передачу параметров i3-input

Сам не пробовал, фантазирую
Поставил линукс тайлинговый оконный менеджер — напиши на Хабре!
Fix:
Я хотел бы продолжить начатую вчера JagaJaga-тему

Да простит меня JagaJaga
UFO just landed and posted this here
Это какие например? У меня i3 все диалоги (которые именно диалоговые, а не обычные окна) открывает в плавающем слое.
Добавьте эту строчку в конфиг i3wm и диалоговое окно Nautilus'а (Действия над файлами) будет по умолчанию не во весь экран.

for_window [class="^Nautilus$" instance="^file_progress$"] floating enable
А как бы сделать так, что бы рестарте i3 у меня не дох xxkb?
Думал он избавит меня от мучений с интерфейсом skype, gimp, lazarus, но нифига. Старательно настроенную конфигурацию контейнеров для каждого приложения он не запоминает. Остальные его преимущества перед не тайловыми WM для меня не существенны.
Это да, этого недостает.

После прочтения документации, пытался настроить запуск Skype'а таким образом:
assign [class="^SkypeTab$" instance="^SkypeTab$"] border none
assign [class="^SkypeTab$" instance="^SkypeTab$"] move up
assign [class="^SkypeTab$" instance="^SkypeTab$"] resize shrink down 32 px or 32 ppt

Но команды move и resize не работают с assign =(
Или я плохо документацию читал? Как еще можно настроить положение и размеры окон на определенном рабочем месте при загрузке?
upd:

Два последних assign в предыдущем примере это for_window (перепутал).

И вот так работает:
for_window [class="^SkypeTab$" instance="^SkypeTab$"] focus; move up; resize shrink down 30 px or 30 ppt; workspace 1: desktop

— фокусируемся на окне, поднимаем его вверх, изменяем размер и перемещаем фокус на рабочий стол «1: desktop».
переключение на русскую раскладку по Alt+Shift

Хм, а я думал, что мода использовать бесполезную клавишу CapsLock для переключения раскладки уже везде победила. ;)
Мне очень понравилось использовать как модификатор Win-клавишу. И запомнить ее очень просто — все «оконные» функции доступны через Windows-клавишу.

Особо приятно по Win-Esc окна закрывать.
А для меня Alt+X рулит. И нажимать можно одним пальцем, и «Х» как крестик закрывающий
НА алте обысно во всяких IDE обязательно чего-нить повешено…
я всегда буду читать текст перед отправкой!
я всегда буду читать текст перед отправкой!
я всегда буду читать текст перед отправкой!
я всегда буду читать текст перед отправкой!
Я раскладки переключаю не используемым мной правым ctrl. а на капс куда удобнее поставить функцию левого ctrl.
Не поступаю подобным образом, так как работая за чужим компьютером, начинаю сильно путаться. Стараюсь придерживаться «стандартов».
Поставил почти как на маке: alt+space, привык моментально, менять не собираюсь.
А использовать клавишу-которую-нельзя-нажимать вообще стараюсь не использовать.
Читая цикл про тайлинговые менеджеры так и не понял в чем их преимущество именно для GUI приложений. На скринах и видео — консоль. Для консоли есть Terminator и tmux, которые позволяют совместить тайлинг с удобствами классических DE. Переключиться из окна браузера в Terminator можно хоткеями. Виртуальные рабочие столы тоже можно создать столько, сколько нужно и без тайлинга и опять же, перемещаться между ними с помощью хоткеев. Возможно в одном рабочем пространстве браузер и мультиконсоль совместить:

ubuntuone.com/3MoUHwDNyLapJL8Mk3eCVa
На моем скрине: вверху хром, внизу открыт Terminator с разделенным по вертикали экраном.
Разделение экрана выполнено с помощью Unity(Compiz): Chrom поднят вверх и сжат до 50% экрана — Ctrl+Alt+8(NumLock), Terminator опущен вниз и сжат до 50% экрана — Ctrl+Alt+2(NumLock). Terminator разделен пополам вертикально — Ctrl+Shift+E.
В KDE теперь тоже есть тайловый режим, но на 4.7 работал он плохо. Для меня основное преимущество тайловых менеджеров в их ресурсоёмкости. Я плавно переходил на нетбуке KDE->Gnome->Unity->Xfce->[Awesome/i3] и только в их случае он перестал тормозить при 5 открытых djvu книгах и браузере.

Обычно раскладка окон в тайловых менеджерах более эффективна с точки зрения использования экранного пространства. Да, я согласен, что можно подкрутить и Gnome так, что у него не будет заголовков окон и т.д. Можно в i3 пользоваться плавающими окнами.

В общем, преимущество в производительности и личных предпочтениях, имхо.
А как же видео с Google Tech Talk? Всяко лучше, чем кратенькая статья, не раскрывающая в полной мере все прелести i3. Благо рассказчик подготовлен очень хорошо — ни единой заминки за всю презентацию.
Спасибо, добавил в топик!
Автор выложил скринсаст от разработчиков и ссылку на документацию — там все предельно понятно. А в видео с Google Tech Talk нет ничего нового.
Не забудьте про автозапуск gnome-settings-daemon, чтобы был корректный рендеринг шрифтов, а на ноутбуках работали сочетания клавиш с Fn.
А зачем добавлять setxkbmap в «.xsessionrc». Настройкам переключения раскладки клавиутуры самое место в «/etc/default/keyboard».
Небольшие выдержки из моего конфига i3wm.

Gedit, Nautilus, диалог Nautilus'а «Действия над файлами» и лаунчер Gmrun по-умолчанию в флоат режиме:
for_window [class="^Gedit$" instance="^gedit$"] floating enable
for_window [class="^Nautilus$" instance="^nautilus$"] floating enable
for_window [class="^Nautilus$" instance="^file_progress$"] floating enable
for_window [class="^Gmrun$" instance="^gmrun$"] floating enable


Сделать скриншот:
bindsym Print exec scrot 'f%Y-%m-%d-%s_$wx$h.png' -e 'mv $f /home/UserName/Scrot/'


Управление громкостью клавишей Win+плюс\минус:
bindsym $mod+KP_Add exec amixer -c 0 sset PCM,0 5+
bindsym $mod+KP_Subtract exec amixer -c 0 sset PCM,0 5-


От трея отказался, статус-бар выглядит так (conky через dzen2 и скрипты на python):
image
1 — Индикатор Dropbox'a (On\Off\Sunc)
2 — Mail информер
3 — Cpu и Ram
4 — Громкость
5 — Дата
* если кому-нибудь надо, выложу конфиги.

___________________
Для получения значений class и instance окна использую утилиту xprop:
$ xprop | grep "WM_CLASS(STRING)"
Выложите конфиги пожалуйста
~/.i3/config
...
bar {
        #status_command i3status
        status_command conky -c ~/.i3/i3conky.conf | dzen2 -h '17' -w '600' -x '1317' -y '1062' -bg '#3c3b37' -ta 'rm'
        position bottom
        tray_output none
        colors {
                background #3c3b37
                statusline #dfd5c8

                # focused_workspace  #ffffff #285577
                # active_workspace   #ffffff #333333
                inactive_workspace #dfd5c8 #222222
                # urgent_workspace   #ffffff #900000
        }
}
...



~/.i3/i3conky.conf
background no
out_to_x no
out_to_console yes
update_interval 1
TEXT
${execpi 5 ~/.i3/i3script/dropbox.py}     ${execpi 600 ~/.i3/i3script/mail.py}     ^fg(\#75dcff)Cpu $cpu% - Ram $memperc%^fg()     ^fg(\#87ff73)Vol ${execpi 1 amixer -c 0 sget PCM | grep -o "Left.*Playback.*" | grep -o "[0-9]*%"}^fg()     ^fg(\#ffa24e)${time %A %d %B %I:%M}^fg() 



~/.i3/i3script/dropbox.py
#!/usr/bin/env python
# coding: utf-8
from subprocess import Popen, PIPE

status = {'Dropbox isn\'t running!': '^fg(\#ea2121)Off^fg()',
        '/home/user/Dropbox: up to date': 'On',
        '/home/user/Dropbox: syncing': '^fg(\#87ff73)Sync^fg()'}

def get_status():
        pp = Popen('dropbox filestatus /home/user/Dropbox', shell=True, stdout=PIPE).stdout.read().replace('\n', '')
        return status[pp]

print get_status()



~/.i3/i3script/mail.py
#!/usr/bin/env python
# coding: utf-8
import pycurl, StringIO, re

username = 'login'
password = 'pass'

def get_mail():
        data = StringIO.StringIO()
        curl = pycurl.Curl()
        curl.setopt(pycurl.WRITEFUNCTION, data.write)
        curl.setopt(pycurl.URL, 'https://'+username+':'+password+'@mail.google.com/mail/feed/atom')
        try:
                curl.perform()
        except:
                return False
        mail = re.findall('<fullcount>(.*)</fullcount>', data.getvalue())[0]
        if mail != '0': return '^fg(\#ea2121)Mail %s^fg()' % (mail)
        else: return 'Mail 0'

print get_mail()

Выглядит интересно; возможно, окажется даже лучше wmii. Но вот отсутствие поддержки Xft сильно удручает, придется патчить самостоятельно. Upstream пока думает
В ветке обсуждения патча говорят, что работает он хорошо. Нужно просто немного подождать

Авторы хотели написать лучше, чем dwm и wmii, он наследник этих wm., поэтому i3: wmiii (improved improved improved)
>никаких дополнительных настроек.
>Настроем их работу в паре:
Так нужно настраивать или из коробки работает?
Имелось в виду настройка wm. Она действительно не нужна. После «настроим» показано, как заставить иксы работать с двумя мониторами. И да, там грамматическая ошибка. Пойду себя накажу
Awesome, xmonad, i3 что из этого дружественней к пользователю?
На мой взгляд, i3. Конфиги там простые и лаконичные — язык программирования изучать не нужно, настройки по умолчанию юзабельны (пару месяцев на дефолте сидел), интуитивно понятное управление окошками, хоткеев не очень много — запомнятся легко.
Может у вас какой-то особенный /bin/sh, но в моём после exec ничего не выполняется. Я про вот этот кусок кода:

#!/bin/sh
exec setxkbmap «us,ru» ",winkeys" «grp:alt_shift_toggle» &
dropbox start &

Вот подтверждение:

% cat ~/tmp/exectest.sh
#!/bin/sh
exec echo 'setxkbmap «us,ru» ",winkeys" «grp:alt_shift_toggle» &'
echo 'dropbox start &'

% /bin/sh ~/tmp/exectest.sh
setxkbmap «us,ru» ",winkeys" «grp:alt_shift_toggle» &

%

Как видите, отработала только одна команда echo.

А вот выдержка из руководства (http://unixhelp.ed.ac.uk/CGI/man-cgi?sh):

exec [-cl] [-a name] [command [arguments]]
If command is specified, it replaces the shell. No new process
is created. The arguments become the arguments to command. If
the -l option is supplied, the shell places a dash at the begin-
ning of the zeroth arg passed to command. This is what login(1)
does. The -c option causes command to be executed with an empty
environment. If -a is supplied, the shell passes name as the
zeroth argument to the executed command. If command cannot be
executed for some reason, a non-interactive shell exits, unless
the shell option execfail is enabled, in which case it returns
failure. An interactive shell returns failure if the file can-
not be executed. If command is not specified, any redirections
take effect in the current shell, and the return status is 0.
If there is a redirection error, the return status is 1.
Вытащите амперсанд из-под кавычек, его передавать exec не надо:

#!/bin/sh
exec echo 'setxkbmap «us,ru» ",winkeys" «grp:alt_shift_toggle» '&
echo 'dropbox start' &

Тогда выполнятся обе строки:

$ ./exectest.sh
$ dropbox start
setxkbmap «us,ru» ",winkeys" «grp:alt_shift_toggle»
Ну если так, то конечно будет две строки на выходе, т.к. exec выполниться в порождённом процессе, а не в текущем. Но объясните мне — а какой тогда смысл писать «exec»? Или ещё лучше — какой смысл в одной строке написать, а в другой — нет? Ведь по сути обе строки отработают одинаково — каждая породит новый процесс, который что-то там сделает и тихо завершится, никак не влияя на родительский.

Совершенно другое дело, если бы запуск Иксов делался бы по-дедовски, с помощью startx и .xinitrc — вот там использовать exec для запуска оконного менеджера было необходимо, и естественно, эта команда была последней.

Может всё-таки расскажете, откуда вы взяли exec? И зачем понатыкали амперсандов? Ну ладно, для дропбокса — не спорю, но для setxkbmap зачем???
Есть. Но через некоторое время понимаешь, что трей вообще не нужен.
Он нужен для Skype, например.
Вот так выглядит статус-бар (conky через dzen2 и скрипты на python):

image
1 — Индикатор Dropbox'a (On\Off\Sunc)
2 — Mail информер
3 — Cpu и Ram
4 — Громкость
5 — Дата
Ага, вы (или не вы) где-то рядом это уже показывали. Я пока не готов тратить 100 МБ памяти на коньки + еще метров N на python + dzen2.

Я пользуюсь Skype, который можно убить или через killall -9 skype или через менюшку в трэйе.
В i3bar есть поддержка трея (+ вход с stdin).
Хм. Я что-то делаю не так :)
Запускается так:
bar {
        ...
        status_command conky -c ~/.i3/i3conky.conf | dzen2 -h '17' -w '600' -x '1317' -y '1062' -bg '#3c3b37' -ta 'rm'
        ...
        }
}


А сам конфиг такой:
background no
out_to_x no
out_to_console yes
update_interval 1
TEXT
${execpi 5 ~/.i3/i3script/dropbox.py}     ${execpi 600 ~/.i3/i3script/mail.py}     ^fg(\#75dcff)Cpu $cpu% - Ram $memperc%^fg()     ^fg(\#87ff73)Vol ${execpi 1 amixer -c 0 sget PCM | grep -o "Left.*Playback.*" | grep -o "[0-9]*%"}^fg()     ^fg(\#ffa24e)${time %A %d %B %I:%M}^fg() 
Хм. Интересно. Видимо из-за background-a и держания в памяти компонентов для X получаются мои 100Mb. Я, правда, действительно, имел часы с календарем на коньках с прозрачностью на пол-экрана…
Skype на отдельном рабочем месте «IM» (вместе с Pidgin'ом) — сворачивать\разворачивать ничего не надо.

Skype'у трей для чего-то еще надо?

P.S. Но повторюсь, трей есть из коробки.
Чтобы видеть написал кто или нет.
Sign up to leave a comment.

Articles