понеділок, 14 листопада 2016 р.

Cisco Webex как приложение для Google Chrome

Прошло полгода с момента моей публикации о том как настроить Cisco Webex на 64-битную Ubuntu - http://nixtravelling.blogspot.com/2016/05/cisco-webex-linux-64-bit.html, и как-то даже неожиданно (по крайней мере для меня) выходит приложение Cisco Webex для браузера Google Chrome. В поиске расширений (Extensions) нужно выбрать Cisco Webex из списка приложений (Apps), а не из расширений. И оно работает! Всё работает - даже видеокамера. Для последующих запусков этого приложения, нужно зайти в браузере в настройки самого приложения и добавить ярлык на рабочий стол. Если же у вас нет рабочего стола (окружения рабочего стола), то конечно же, тот ярлык вы запустить не сможете. Но, открыв созданный файл (что-то вроде ~/Desktop/chrome-fcaampjejlfaadkgdacpfhheknndlcjl-Default.desktop):

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=Cisco WebEx
Exec=/opt/google/chrome/google-chrome --profile-directory=Default --app-id=fcaampjejlfaadkgdacpfhheknndlcjl
Icon=chrome-fcaampjejlfaadkgdacpfhheknndlcjl-Default
StartupWMClass=crx_fcaampjejlfaadkgdacpfhheknndlcjl
Копируем значение аттрибута Exec и вставляем себе в шелл-скрипт. Вот это и будет запускать приложение Cisco Webex.
Вот и всё. Наконец-то, дождались. Ещё осталось дождаться драйверов побольше и игрушек. Удачи.


пʼятницю, 26 серпня 2016 р.

Жизнь в терминале

Продолжая прошлую тему i3wm, ещё раз напомню, что с клавитурой работать быстрее и удобнее, чем с мышкой. Да, мышку всё равно приходиться брать в руки (ютубчики, фейсбучики, пострелять в UrbanTerror и т.д. и т.п.) Ну а всё остальное отлично получается делать с помощью клавиатуры и хороших утилит. Поехали.
Первое, без чего будет тяжело - файловый менеджер. Уже неоднократно упомянутый Midnight Commander чудесно с этим справляется, а также приносит настоящую радость тем, кто ещё помнит Norton и Volkov Commander. Немножко настроить, выучить пару клавиатурных комбинаций - и друзья навеки:

Есть ещё Ranger со своими интересными фичами и vim-like командами, но, как по мне, не то:

Легковесная читалка pdf/djvu - Zathura, тоже с vim-like командами, нравится очень:

Также открыл для себя простой музыкальный плеер с встроенным навигатором по файловой системе, Cmus:

Даже погуглить иногда спокойно можно с текстовым браузером w3m или elinks. Больше нравится w3m, вот как выглядит стартова страница гугла в нём:

А ещё проще можно сделать поиск с помощью утилиты surfraw, к примеру выполнив команду:
surfraw google nixtravelling

сразу получим страницу выдачи гугл:

Кстати, w3m тоже имеет много vim-like команд и комбинаций клавиш. Как видим, от изучения редактора vim одни плюсы.

Переходя теперь больше к i3wm, а значит не имея DE и привыкая делать всё с помощью терминала, нам необходимо решить ещё пару проблем. Первое - ассоциации программ по-умолчанию с типами файлов. Узнать тип (mime) файла можно с помощью команды:
xdg-mime query filetype <path_to_file>

А задать программу по умолчанию командой:
xdg-mime default <program>.desktop <mimetype>

Открыть же программой по умолчанию некий файл можно командой xdg-open (ну или уже просто ентером в файловом менеджере). Пример:
$ xdg-mime query filetype ~/Downloads/Coroutines.pdf
application/pdf
$ xdg-mime default zathura.desktop application/pdf

Следующая проблема - как монтировать/отмонтировать флешку с терминала? Конечно же, использовать команду mount/umount. Для монтирования Я себе даже скриптик накидал, ибо часто приходится вводить дополнительные опции:
#!/bin/bash

function Mount_USB()
{
    cmd="sudo mount -ouser,uid=1000,gid=1000,umask=0000 $1 $2"
    echo "$cmd"
    $cmd
}

usb_device=$1
directory=$2
if [ -z $1 ] || [ -z $2 ]; then
    echo "USAGE: mount_usb.sh <usb_device> <directory>"
    exit 1
fi
if [ -d $directory ]; then
    Mount_USB $usb_device $directory
else
    sudo mkdir $directory
    Mount_USB $usb_device $directory
fi

Здесь gid, uid равняются 1000, это идентификатор группы и пользователя меня. Для себя вы можете узнать выполнив команду id. Отмонтировать же флешку можно как по точке монтирования, так и по пути устройства флешки. Я выбираю второе. Думаю, если Вы работаете ежедневно в терминале, то с флешками проблем никак не будет. Ну и если хочется выглядеть полностью как задрот, можно ещё себе поставить пакет bsdgames - сборник классических игр в текстовом режиме, а некоторые в полутекстовом (скорее всего с библиотекой curses):

Да, это тетрис! А ещё есть даже текстовая игра MMORPG! И мало кто поймёт на работе, что вы играетесь, а не работаете :)
Чтобы в неё играть, даже не надо ничего устанавливать, просто подключаетесь через telnet:
telnet www.ateraan.com 4002

На этом всё. Возможно, по i3wm продолжение всё ещё следует...

пʼятницю, 12 серпня 2016 р.

i3wm. Впечатления и настройка

Вот уже несколько месяцев прошло как Я перешел на "оконный менеджер" вместо "окружения рабочего стола". Более техническую и точную разницу между этими двумя понятиями можете нагуглить. С точки зрения обычного пользователя (по крайней мере с того, что мне почувствовалось) - WM (оконный менеджер) лишь управляет окнами, а значит:
1) меньше жрет ресурсов;
2) основная работа будет с клавиатурой, мышкой лишь в браузере тыкать и в Gimp;
3) настройки в большей части делать нужно через терминал и конфигурационные файлы, никакой общей панели управления, хотя это сделать можно.
Для обычного пользователя это всё может показаться сложным и ненужным - ну и что, что жрет меньше ресурсов, ведь у меня 100500 ГБ оперативки и чуть меньше ядер процессора. А вот мой старый ноутбук получил вторую жизнь, голая система (Ubuntu 16.04) без DE съедает лишь чуть более чем 200 МБ оперативки. Ну и тайловый оконный менеджер i3 (i3wm - improved windows manager), которому посвящен этот пост, предоставляет ещё одну чудесную возможность - настройка нескольких мониторов с разнымы разрешениями реально проще пареной репы.
Итак, знакомство можете начинать с официального сайта - https://i3wm.org/docs/userguide.html. Для начала можно поставить его дополнительно к обычному DE и выбирать сессию i3 при логине. А когда хватит сил пересесть полностью, можно поставить голый дистрибутив линукса без DE и тогда сразу ставить этот WM. Перед загрузкой сессии i3 обязательно выпишите себе пару комбинаций клавиш и команд, ибо так и застрянете с пустым чёрным экраном и будете делать хард ресет :)
При первом запуске i3 спросит клавишу-модификатор, Я себе выбрал клавишу "win" - хоть какая-то польза и не будет перебивать другие комбинации. Теперь Вы можете запустить терминал комбинацией "win+Enter", а если есть терминал - есть всё.
Кстати, насчёт эмулятора терминала, мой выбор в i3 - urxvt, а для полного счастья нужно ставить пакет rxvt-unicode-256color. Он не такой функциональный как, например, стандартный гномовский, зато быстрее и красиво выглядит в тайловых WM. Все настройки urxvt правите в ~/.Xresources, после редактирования файла - выполнить команду:

xrdb ~/.Xresources

Следующий важный для меня шаг - настройка статусной строки, особенно хотелось иметь рабочие иконки Dropbox и Skype. Конечно же, хотелось настроить имеющуюся с коробки строку статуса - i3bar, хоть она немного багнутая. Если не понравится, ставьте что-либо другое, i3wm не будет обижаться.

Как работает i3bar: утилита i3status читает конфиг файл /etc/i3status.conf и скармливает полученные статусы в виде строки утилите i3bar. Конечно же, адекватные статусы хочется получать за приемлемое время, не более секунды. Поэтому в конфиг файле  в секции general, опции interval нужно задать значение 1. Ещё быстрее нет смысла, только лишняя нагрузка процессора. Но из-за того, что эти статусы то ли стают в очередь, то ли ещё чего, а мой старый нетбук до того тормозной, что не успевал каждую секунду обрабатывать всё и обрабатывал статус где-то за 1,1 секунды, они отображались не вовремя. Через час работы разница во времени (между настоящим и тем, что показывал в строке статуса) ставала очень велика, около 15-20 минут. Поэтому нужно было придумать что-то другое. К счастью, i3 позволяет написать свой скрипт для получения статусов и использовать его совместно со встроенным, либо даже без встроенного. Итак, первая версия скрипта:
#!/bin/sh
# shell script to prepend i3status with more stuff

i3status | while :
do
    read line
    datetime = $(date +"%Y-%m-%d %H:%M:%S")
    echo "$datetime | $line" || exit 1
done
Принцип работы скрипта простой: читаем i3status, достаём то, чего нам не хватает, и выводим эту сроку далее. В таком варианте пропадут все цвета, поскольку цвета кодируются специальными последовательностями символов и съедаются оболочкой. Но при желании можно дописать свои функции для обертки разных параметров цветами.
Чтобы этот скрипт запускался вместо стандартного i3status, нужно в ~/.config/i3/config править секцию bar:
bar {                                                                           
        status_command ~/i3status.sh                                            
        tray_output primary                                                     
        position top                                                            
}
В опции status_command нужно указать полный путь к своему скрипту (ну или поместить его по одному из путей в переменной PATH).
Следующее, что мне страшно нехватало -  отображение раскладки, языка. Опять-таки, i3wm не для новичков, придется потратить много времени и нервов. Но настроив единожды, можно легко переносить свои настройки на любую другую машину. Также можно заливать конфигурационные файлы и автоматические скрипты на GitHub и выполнять любую настройку с нуля за считанные минуты. Для управления раскладками (чтобы в каждом приложении была своя раскладка), нужно поставить kbdd. Сами же раскладки, метод переключения и  запуск kbdd настраиваем в ~/.xinitrc:
setxkbmap "us,ua,ru" ",winkeys" "grp:shift_caps_toggle"
kbdd
exec i3
Что это всё значит:
1) 3 раскладки - us, ua, ru, переключение комбинациией shift+caps lock (по аналогии можете себе настраивать всё, что угодно)
2) запуск kbdd после установления раскладок
3) запуск сесии i3

При этом это всё запустится при выполнении команды "startx". А startx придется выполнять, ибо компьютер будет грузиться в режиме без иксов и вместо окошечка с логином будет консоль с логином. Кстати, это тоже надо настроить правильно:
1) нужно поправить конфиг grub
ищем строку

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

и меняем на

GRUB_CMDLINE_LINUX_DEFAULT="text"
после чего обновить груб:

sudo update-grub

2) Для систем, которые используют systemd надо сделать дополнительные настройки:
sudo systemctl enable multi-user.target --force
sudo systemctl set-default multi-user.target
3) сам блокиратор экрана с логином тоже нужен консольный, для этого хорошо подойдет vlock, но надо ставить версию 2.2.2-3, никак не 2.2.2-5 (в этой более новой версии почему-то можно зайти без пароля с другого tty). Ну и потом надо будет сказать своему пакетному менеджеру, чтобы не обновлял vlock. Далее вешаем блокирование экрана на стандартную комбинацию (CTRL+ALT+L), для этого в ~/.config/i3/config добавляем строчку:
bindsym ctrl+Mod1+l exec vlock -an

Теперь надо настроить отображение раскладок в строке статуса, поэтому тот скрипт i3status.sh будет выглядеть примерно так:
#!/bin/sh
# shell script to prepend i3status with more stuff

i3status | while :
do
    read line
    datetime = $(date +"%Y-%m-%d %H:%M:%S")
    layouts=$(setxkbmap -query | awk '/layout/{print $2}')
    current=$(dbus-send --print-reply=literal --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout | awk '{ print $2 }')
    index=$(($current+1))
    lang=$(echo $layouts | cut -d, -f$index)
    echo "$lang | $datetime | $line" || exit 1
done
То есть, текущая раскладка будет показана перед датой/временем.

Если же Вы таки решились поставить на ноутбук i3wm, Вам скорее всего захочется в строке статуса отображать уровень заряда батареи и уровень сигнала wifi. Отображение уровня  заряда батареи можно настроить стандартными средствами в файле /etc/i3status.conf (возможно, поменять надо будет индекс  батареи с 0 на 1, или наоборот в зависимости от ноутбука):
battery 1 {
  format = "%status %percentage - %remaining"
  low_threshold = 30
  threshold_type = time
  # toggle actual capacity/design capacity
  #last_full_capacity = true
  hide_seconds = true
  integer_battery_capacity = true
}
Аналогично, возможно надо будет поиграться с индексом звукового устройства для отображения громкости:
volume master {
    format = "♪: %volume"
    format_muted = "♪: muted (%volume)"
    device = "pulse:0"
}
Саму же громкось в данном случае регулирую через программу pavucontrol (если у вас тоже Pulse, то настройки по сути те же). 

Ну а вот уровень сигнала wifi было "достать" не так просто. Лично мне удалось через CLI (Command Line Interface) Network Manager-а. Возможно, найдете лучший способ. Кстати, искать беспроводные сети и подключаться к ним можно через этот же nmcli. Итак, финальная версия скрипта i3status.sh для ноутбука:
#!/bin/sh
# shell script to prepend i3status with more stuff

i3status | while :
do
    read line
    layouts=$(setxkbmap -query | awk '/layout/{print $2}')
    current=$(dbus-send --print-reply=literal --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout | awk '{ print $2 }')
    index=$(($current+1))
    lang=$(echo $layouts | cut -d, -f$index)
    wifi=$(nmcli d wifi | grep "^\*" | grep -v "\*.*SSID" | awk '{ print $8 }')
    datetime=$(date +"%Y-%m-%d %H:%M:%S")
    echo "$lang | W: $wifi | $line | $datetime" || exit 1
done
Ах, ну и ещё отключить "клик мышки" на тачпаде, это страшно бесит. Нужно добавить строчку (# - комментарий, не обязательно добавлять, но хорошо проясняет следующую строчку) в файл ~/.config/i3/config:
# Turn off tap click (single finger, two finger, and 3 finger)
exec synclient TapButton1=0 TapButton2=0 TapButton3=0
Иконки. Почему-то именно иконка Dropbox не хочет нормально отображаться в i3bar. Оказывается, нужно запустить dbus перед стартом dropbox, но в какой только скрипт Я не пробовал это засунуть, а Dropbox по-прежнему запускался без иконки. Пока что решил эту проблему тем, что создал скрипт dropbox_fix.sh и прописал такую строчку:
dropbox stop; dbus-launch; dropbox start &
И теперь каждый раз когда вижу, что нет иконки, запускаю этот скрипт. Иногда бывают проблемы с отображением иконок Skype и даже Thunderbird. Это лечится проще - просто перезагрузкой i3 "на месте" (никак не влияет на все запущенные программы), обычно это комбинация mod+shift+r. Да, ещё раз напомню, что багов таких мелких хватает, но плюсов в i3wm Я увидел больше, да и рабочий компьютер у меня не выключается месяцами, а значит "стартовые багофиксы" выполняю очень редко.

Далее, что ещё нужно знать о настройках - в конфиг файле ~/.config/i3/config ваша выбранная клавиша-модификатор будет обозначаться как $mod, клавиша alt обозначается как Mod1, клавиша win - Mod4. Все остальные клавиши таких специальных обозначений не имеют. Настроить несколько мониторов можно в этом же файле используя команду xrandr.
И ещё одна важная вещь - скриншоты тоже надо настроить! Но и это не проблема. Сначала ставим утилиту scrot - легкая, быстрая и конфигурабельная. Обычний снимок (весь экран) вешаю на кнопку PrintScreen, а на Alt+PrintScreen - снимок текущего (активного) окна. Поскольку клавиша Alt сама является модификатором, то самый легкий способ привязать данную комбинацию - это указать альтернативное значение кнопки PrintScreen, то есть - SysRq. Итого в файл ~/.config/i3/config добавляем следующие строчки:


# Take screenshots
bindsym Print exec scrot '%Y-%m-%d_%H:%M:%S.png' -e 'mv $f ~/Pictures/'
bindsym Mod1+Sys_Req exec scrot -u '%Y-%m-%d_%H:%M:%S.png' -e 'mv $f ~/Pictures/'
В результате все скриншоты будут попадать в папку ~/Pictures. При желани можно наконфигурить ещё больше гибкости. Вот пример скриншота с i3wm:



Пока что всё. Если у Вас есть другие предложения по настройке i3wm прошу делиться. Я же по возможности буду редактировать этот пост или напишу новый если наберется много чего нового. Продолжение следует...

понеділок, 30 травня 2016 р.

Многострадальная тема - Cisco Webex на Linux 64-bit

Вот и Я столкнулся с данной проблемой при переходе на 64-битную Ubuntu. В Интернете уже есть множество вопросов, обсуждений и решений. Насколько мне удалось понять - никто делать нормальную поддержку для линуксов не будет, сделали единожды для 32-бит - и хорошо. А что касается решений - большинство из них либо устаревшие, либо очень сложные. В любом случае, универсального решения (да ещё такого, чтобы автоматический скрипт написать) можно не ждать. Придется немного поковырять самостоятельно. Единственное, что Вам нужно 100% - 32-битный браузер и библиотеки. Итак, каркас настройки берем из этой статьи (она тоже устаревшая) - https://habrahabr.ru/post/163771/
Чтоб скачать последнюю 32-битную версию firefox смотрим в этот файл:
http://ftp.mozilla.org/pub/firefox/releases/latest/README.txt
На момент написания этого поста была доступна версия 46.0.1, а формат - tar.bz2 (формат вроде не менялся). Соответственно, для красоты качаем таким образом:


wget -O firefox-46-0-1.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux&lang=en-US"

Теперь распаковываем в удобную для вас директорию или же, исходя из статьи в ~/32bit/ (tar xzf, а вообще, Вы уже должны уметь работать с архивами). Далее доустанавливаем 32-битные библиотеки, коих в новых версиях убунты уже нет. Поэтому (по крайней мере на Убунте 16.04), ставим так:


sudo apt-get install lib32z1

Профили в браузере создавать не обязательно, да и неудобно будет каждый раз перезапускать браузер или ещё чего (два firefox не могут быть запущены одновременно, даже если один - 32-битный, а второй - 64-битный). Далее нужна действительно Java (JRE) от Oracle, почему-то не удалось завести вебекс с openjdk и всем прилегающим (если у Вас получится - отпишитесь в комментах). Все старые версии доступны лишь с имеющимся аккаунтом в Oracle, а на данній момент существующая 8-ая версия не подходит. К счастью, ещё можно наковырять 7-ую, которая и доступна и подходит - http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html Распаковывайте самостоятельно :)
Теперь почти как в той статье создаем ссылку на плагин (у Вас может несколько отличатся, но Вы же делаете всё сознательно, не так ли?):


cd ~/32bit/firefox/plugins
ln -s ~/32bit/jdk1.7.0_80/jre/lib/i386/libnpjp2.so .

Ну и конечно же скрипт для запуска firefox:


#!/bin/bash
export ENV_HOME=~/32bit
export FIREFOX_HOME=$ENV_HOME/firefox
export MOZ_PLUGIN_PATH=$FIREFOX_HOME/plugins
export JDK_HOME=$ENV_HOME/jdk1.7.0_80
export JAVA_HOME=$JDK_HOME/jre
export PATH=$JAVA_HOME/bin:$JDK_HOME/bin:$PATH
$FIREFOX_HOME/firefox --no-remote

Как и в статье с хабра, делаем исполняемым и будем его запускать:
chmod +x ~/32bit/firefox.sh

Также, там говорится, что в Убунту 14.04 надо будет установить еще libxmu6:i386. Не знаю, как там в 14.04, но в 16.04 этого оказалось недостаточно. Запускаем из консоли firefox, далее тот webex и смотрим в консоль какие валятся ошбики от java. Скорее всего, будет жаловаться на недостающие библиотеки или файлы. Тут уж надо смотреть Вам лично, потому как не обязательно, что у всех будет одинаково. К примеру, у меня жаловался на недостающие файлы:
libgtk-3.so.0, libXtst.so
Какие же пакеты надо установить? Для этого используем команду apt-file find (кстати, apt-file возможно тоже надо установить). Итого:


apt-file find libgtk-3.so.0
libgtk-3-0: /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
libgtk-3-0: /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.1800.9
libgtk-3-0-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.1800.9

а значит, надо установить libgtk-3-0:


apt-get install libgtk-3-0

И так проделайте со всеми недостающими файлами. Вроде всё - можно перезагружать браузер и пробовать. Пишите в комментах, если что-то не получается, возможно смогу чем-то помочь (но не обещаю :)) А если же нет - держитесь там, всего доброго! :)

четвер, 28 квітня 2016 р.

Очередная статья о разбивке жесткого диска

21 апреля, как и обещалось, вышла новая Ubuntu 16.04 LTS. Я решил поставить её на рабочем компе в оригинальном виде (с Unity), а на свой нетбук всё так же Xubuntu (фактически та же убунта, но с окружением рабочего стола - XFCE). Ну и конечно же, захотелось переразбить жесткие диски, так как в первый раз Я их разбивал по разных рекомендациях из сети и не имея собственного опыта. Из-за этого имел некоторые проблемы. Итак, давайте коротко пройдёмся по основным пунктам:

/ - корень (root), это должно существовать всегда, как иначе дерево будет без корня?
/home - тут будут храниться домашние каталоги пользователей; поскольку пользователи могут забить дисковое пространство под завязку, это надо закидать на отдельный раздел.
swap - это тоже надо, когда не будет хватать оперативки, своп выручает. Казалось бы, если оперативки на компе много, зачем своп? Только место занимает. Но, поэкспериментировав с компом с 8-ю гигами оперативы, увидел, что без свопа "умирает". Сегодня браузеры уже не те, да и скайп отжирает много. А если ещё какие-то виртуалки крутятся, то вообще беда. В общем, рекомендуемый своп - размер оперативки (по крайне мере, чтобы загнать ноут в спящий режим). Но, когда оперативки будет 16 гб или больше, будет немного жаль столько жесткого диска отдать. Возможно, при таких размерах оперативки и не пользуясь дополнительными режимами остановки ОС, можно своп сделать маленький - до 4 гб. С другой стороны, когда жесткий диск - 500 гб, то не жаль отдать и 16 гб на своп.

Вот для десктопа, в принципе, больше ничего и не нужно, если дать на корневой раздел - 30 гб, то должно хватить с головой. И не надо будет мучиться с LVM или ещё чем-нибудь подобным. Вот так, дешево и сердито, фактически как когда-то делали диски C: и D: для винды :)
Ну и можете смело для всех этих разделов выбирать файловую систему ext4 (возможно, потом появится ещё что-то лучше).
Если же это какой-то сервер или просто удаленная многопользовательская машина, рекомендуется сделать дополнительные разделы:

/tmp - при одновременной работе нескольких пользователей (конечно, смотря что они делают) этот каталог может расти, поэтому его надо забрать с корневого раздела и разместить отдельно.
/var - тут будут складироваться лог-файлы, если это сервер, то логи будут очень большие и расти будут очень быстро, поэтому - на отдельный раздел.
/usr - сюда обычно ставятся программы, большинство из них на серверах обновляются редко, обычно после всех проверок на стабильность, ибо сервер должен быть стабилен. И это рекомендуют даже монтировать в режиме только для чтения, чтобы никто не смог удалить какую-то важную программу. И лишь администратор при необходимости обновлений может перемонтировать в режим для чтения/записи и провести все обновления.
/etc - конфигурации всех и вся. Встречается редко, но видел даже такое, мол дополнительная защита конфигов.
И когда-то выносили /boot в отдельный маленький раздел (были на то свои причины) - этого делать уже не нужно.

Ну вот и всё. Прошу делиться своими мыслями по этому поводу. Конечно, статей и мыслей множество, и всё меняется со временем, поэтому будем пытаться идти в ногу со временем.

понеділок, 22 лютого 2016 р.

Vim kung fu

- Ты хочешь научиться кунг-фу?
- Дааааа!
- Тогда Я и есть твой мастер!

из мультфильма "Панда Кунг-Фу"


Так же, как мастер Шифу и панда По обрели новый опыт и новый взгляд на старые вещи, так и Я путем попыток и ошибок изменил в корне свою работу с Vim. И как обычно, начну с краткой предыстории.
Мой рабочий компьютер обычно остаётся включенным несколько месяцев (рекорд uptime - 112 дней), а значит и всё программы, окна, вкладки остаются на месте. И вот наконец настал тот час, когда у меня в vim открыт большой проект, нужно внести изменения в 6 файлов, чтобы реализовать нужную фичу. При этом надо было выключить компьютер, и Я вспомнил, что в vim есть возможность сохранить сессию (команда mksession). Я сохранил, закрыл, проверил - что-то пошло не так. NERDTree вообще не загрузил дерево каталогов, появилось также дополнительные пустые окна, в общем - хаос и ужас. Конечно же, Я сразу начал искать в сети что да и как. Предлагались разные варианты с дописыванием своих функций в конфиге vim. Но, в ходе поиска Я наткнулся на пост человека по имени Josh Davis http://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/.
И вот тут до меня дошло, а ведь действительно - файлы в vim открываются в буферах, всё остальное - это для удобного размещения на экране. Следуя этой статье, ссылкам в ней и поиска в сети с новым ключевым словом - буфер, Я взялся перенастраивать свой Vim и перепрывыкать к работе с файлами (буквально два дня работы с редактором и всё отлично). Теперь табы Я использую крайне редко, соответственно, удалил плагин NERDTreeTabs, оставил только NERDTree.
Итак, приступим к новой настройке моего (если вы это всё же читате, скорее всего и вашего) любимого текстового редактора.
Порядок действий:

1) установить git, если вдруг ещё не поставлен

2) установить плагин для работы с буферами (и не только), как в блоге того Джоша:

На данном этапе у вас должно получится что-то такое:


А чтобы сделать такое красивое, как у Джоша, надо ещё поработать:
3) скачать шрифты для powerline
git clone https://github.com/powerline/fonts.git ~/.fonts

4) регистрируем шрифты в системе:
fc-cache -vf ~/.fonts/

5) выбираем в настройках терминала нужный шрифт (не все подойдут, но можно смело выбирать "Meslo LG S for Powerline")

6) добавляем строчку в .vimrc:
let g:airline_powerline_fonts = 1
Это заполнит словарь символов новым шрифтом.

И теперь у вас должно получится как-то так:


И ещё для полного счастья взгляните на плагин Tagbar https://github.com/majutsushi/tagbar (не забудьте установить exuberant-ctags перед его использованием).
Конечно же, весь этот процесс можно максимально автоматизировать, для чего можно написать скрипт вроде такого:
#!/bin/bash
# Install Pathogen plugin and runtime manager
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

# Install plugins
git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree
git clone https://github.com/ctrlpvim/ctrlp.vim.git ~/.vim/bundle/ctrlp
git clone https://github.com/vim-airline/vim-airline.git ~/.vim/bundle/airline
git clone https://github.com/vim-airline/vim-airline-themes ~/.vim/bundle/airline-themes
git clone https://github.com/majutsushi/tagbar.git ~/.vim/bundle/tagbar

# Get fonts
git clone https://github.com/powerline/fonts.git ~/.fonts
fc-cache -vf ~/.fonts/

# Get vimrc
curl https://raw.githubusercontent.com/MasterSergius/conf_files/master/.vimrc -o ~/.vimrc

Здесь Я использую Vim Pathogen для управления плагинами, а готовый vimrc качаю из своего репозитория конфигурационных файлов (рекомендую и вам завести свой репозиторий). Единственное, что придётся сделать вручную - это выбрать шрифт в Терминале, но и это можно автоматизировать при желании. К примеру, в xfce сессии все настройки графической среды лежат в домашней директории (на момент создания этого поста - директория .xfce4). Там можно найти конфигурацию терминала в обычном текстовом файле, а значит задать шрифт автоматически довольно легко. Также для продвинутого использования плагинов, написания своих скриптов и т.д. рекомендую книгу The VimL Primer - Edit Like a Pro with Vim Plugins and Scripts by Benjamin Klein.
Не забывайте, что вы можете в комментариях писать свои предложения, делиться вашими настройками, плагинами, мыслями и так далее. Чем больше мы будем расшаривать полезную информацию, тем будет легче её найти другим. А другие тоже чем-то поделятся, а значит все выиграют.
Удачного кодинга с Vim!

понеділок, 18 січня 2016 р.

Полезные ресурсы и книги

Век живи - век учись! Можно сюда ещё добавить кучу прописных истин в стиле "мастерами не рождаются, мастерами становятся" и так далее. Мало того, некоторым вещам нужно обучаться десятилетиями. И, конечно, совершенства достичь вряд ли возможно, но стремиться нужно. Я, к примеру, познакомился с миром *nix более 5 лет назад, но ежедневно "сидеть" на линуксах начал лишь 3 года назад. И за это время Я ещё до сих пор не собрал собственноручно ядро (а ещё поговаривают, что каждый линуксоид должен сам себе собрать ядро и настроить с нуля систему); Я также понимаю, что мне известна лишь малая часть этого мира, и края не видно. Да и запомнить нормально всё то, что уже проходил тоже сложно, поэтому этот блог Я создал отчасти для себя, чтобы не забыть некоторые вещи, всегда иметь в сети пример конфига vim, быстро расшарить файлы по сети и т.п., если вдруг что-то случится с моими нотатками и бекапами на собственном компьютере. Конечно, если работа связана с администрированием системы, сети, баз данных или ещё чего, то оно само собой будет учиться и запоминаться. А для обычного пользователя, который хочет наслаждаться работой и быть эффективным вполне достаточно даже десятой части этих знаний. В общем, хватит лить водичку, перейдем к делу.

Книги (некоторые есть лишь на английском, но это даже ещё полезней):
- Современные операционные системы Эндрю Таненбаум
Unix и Linux. Руководство системного администратора Эви Немет, Гарт Снайдер, Трент Хейн, Бэн Уэйли
- Linux in a Nutshelby Ellen Siever, Stephen Figgins, Robert Love, Arnold Robbins
Компьютерные сети. Принципы, технологии, протоколы Олифер В.Г., Олифер Н.А.
- Запускаем Linux Маттиас Калле Далхаймер, Мэтт Уэлш
- Ubuntu Pocket Guide by Keir Thomas

Ресурсы:
- Advanced Bash Scripting Guide
- 10 лучших команд на хабре
60 команд от новичка до администратора
- Форум Ubuntu

Для начала всего этого хватит сполна. А далее - учимся самостоятельно находить нужную информацию, регистрироваться на соотвествующих форумах, коректно задавать вопросы. Если же у вас есть предложения по ресурсах, добавляйте в комментариях - давайте делиться информацией :)

вівторок, 5 січня 2016 р.

Работа с sshfs

Как уже ранее упоминалось, в мире Linux есть много способов расшаривания/передачи файлов по сети (рассматривались Samba, FTP и HTTP). Знаем также, что можно безопасно "ходить" по разных хостах через ssh и копировать файлы через scp. Даже можно работать в Vim на своей машине с помощью netrw плагина, который автоматически при сохранении файла копирует его через один из транспортных протоколов, что настраивается (в том числе и через scp). Естественно, это сопровождается задержками при сохранении, так как каждый раз устанавливается новое соединение. А можно просто примонтировать себе удалённую директорию (структуру, файловую систему и т.п.) и работать с ней как с локальной директорией. Естественно, никто чужой не должен иметь доступ к точке монтирования, иначе зачем эта вся безопасность с ssh?
Итак, для начала вам надо установить sshfs (теоретически, оно должно автоматически подтянуть fuse, на котором sshfs базируется). Все нужные настройки и дополнительные пакеты смотрите для вашего дистрибутива; в основном далее достаточно себя добавить в группу fuse и всё.
Монтирование выполняется командой:

sshfs <-o опции монтирования> user@host:<путь> <точка монтирования>

А размонтирование:

fusermount -u <точка монтирования>

Это всё можно красиво завернуть в простой bash скрипт, дабы облегчить себе же работу (в данном случае, к удалённым хостам Я подключаюсь через SOCKS, проброс через порт 3128):
#!/bin/bash

USAGE="USAGE:\n\
        \t$0 mount|umount|remount <host_name>\n"

SSHFS_MOUNT_ROOT=/home/sergius/work/SSHFS

action=$1
host=$2

function mount_sshfs( ) {
    if [[ -z $host ]]
    then
        echo "Invalid arguments"
        echo -e $USAGE
        exit 2
    fi

    mkdir -p $host
    sshfs -o reconnect,workaround=all,ProxyCommand="/bin/nc.openbsd -x localhost:3128 %h %p" sergius@$host: $SSHFS_MOUNT_ROOT/$host/
}

function umount_sshfs( ) {
    fusermount -u $SSHFS_MOUNT_ROOT/$host
}

function remount_sshfs( ) {
    umount_sshfs;
    mount_sshfs;
}

if [[ $action == "mount" ]]
then
    mount_sshfs;
elif [[ $action == "umount" ]]
then
    umount_sshfs;
elif [[ $action == "remount" ]]
then
    remount_sshfs;
else
    echo "Invalid arguments"
    echo -e $USAGE
    exit 1
fi

exit 0

Сохраняем скрипт под именем "mount_sshfs" и делаем его исполняемым. Теперь монтируем командой (если находимся в директории, где скрипт, то путь начинается с точки):
./mount_sshfs mount home_comp
Где home_comp - имя моего домашнего компьютера. В большинстве случаев, далее вам пригодится только remount. Есть один недостаток (больше мне не встречалось) в sshfs: когда связь обрывается, а вы выполняли как раз какую-то операцию ввода-вывода - это может затянуться надолго, а уж после появится сообщение с ошибкой. Всегда можно прибить процесс, перемонтировать. В любом случае, это надо всё попробовать самому - лучше один раз пощупать, чем сто раз увидеть.
Да и вообще, sshfs существует уже довольно давно, а вот активно пользоваться этим Я начал лишь несколько месяцев назад. И пришел к выводу, что довольно полезная вещь, по крайней мере в моей работе, поэтому решил это внести в блог, пусть запись вышла немного сырая, но кому-то может пригодиться. Также можете внести предложения к публикации в комментариях, подправлю.