2012-11-14

mount без пароля

Задача: написать скрипт, который будет монтировать папку с удаленного win-сервера, и, после копирования файлов на локальную машину, отмонтировать её.
Казалось бы, ничего сложного, mount решает:

sudo apt-get install cifs-utils
sudo mount -t cifs //192.168.0.1/Folder /home/kawaikunee/Folder -o username=User,password=Pass,rw,file_mode=0777,dir_mode=0777
cp -a -n /home/kawaikunee/Folder/*.pdf /home/kawaikunee/Doc/PDFs/
sudo umount /home/kawaikunee/Folder

Да вот только одна проблема: скрипт должен работать автономно. И пароль sudo ему знать совсем не обязательно.

Решение: добавить пользователю, от чьего имени запускается скрипт, права на беспарольное использование sudo mount и sudo umount. Для этого внесём изменения в файл /etc/sudoers

sudo gedit /etc/sudoers

Добавим в него строчку:

kawaikunee linux = NOPASSWD: /bin/mount,/bin/umount

где первые два слова - имя пользователя и имя компьютера (они обычно представлены в приглашении терминала по умолчанию).

Задача решена. Скрипт использует sudo, но пароль у него не спрашивают.
P.S. Что-то мне подсказывает, что так можно и другие подобные задачи решить :)

2012-08-13

Node.JS: DEB-пакет

Решил побаловаться с Node.JS, поставил из репозитория. npm в комплекте не идёт, при установке nodejs-dev пишет "но пакет не будет установлен". Не стал долго париться,  поставил с оф.сайта. Собрал DEB-пакеты, если кому нужно.

DEB-пекет
node_0.10.0-1_i386.deb

2012-05-30

Ubuntu 12.04 + Adobe Air

В репозитариях Ubuntu 12.04 больше нет пакета adobeair. Не поддерживает Adobe нашу братию. Но рабочий air всё ещё есть, и для некоторых софтин он нужен. Специально для вас выкладываю в dropbox:
Adobe AIR 2.6 for Linux

2012-05-28

GVim: открываем все файлы в одном окне

Что такое GVim: немного обGUIфицированная версия Vim. Что, впрочем, не мешает использовать ее без GUI-фич, просто мне шрифты показались там глаже.
По умолчанию GVim каждый файл открывает в отдельном окне, что не есть гуд. Даже Gedit открывает их во вкладках одного окна (если не глючит). Немного почитав доки, накидал вот такой скрипт:

#!/bin/bash
GVIM_COUNT=`ps -A | grep gvim | wc -l`
if [ $GVIM_COUNT -gt 0 ]; then
/usr/bin/gvim --remote-silent "$1"
else
/usr/bin/gvim "$1"
fi

Сохранил его в домашнюю папку:
/home/kawaikunee/bin/g_vim.sh
и сделал исполняемым:
chmod +x /home/kawaikunee/bin/g_vim.sh

Скрипт ищет запущенный инстанс GVim, если его нет - то открывает файл в обычном режиме в GVim, если есть - открывает его с параметром --remote-silent, в уже существующем окне. Если запустить с этим параметром сразу, то будет сначала открыт GVim, затем в нем создан пустой документ, а потом добавлен редактируемый файл. Итого - ненужный "Безымянный документ". Поэтому сначала проверим - есть открытое окно или нет.
Дальше откроем файл с правами администратора:
sudo gedit /usr/share/applications/gvim.desktop

Находим строку "Exec=gvim" и изменяем слово gvim на полный путь к своему скрипту:
Exec=/home/kawaikunee/bin/g_vim.sh %F

Сохраняем, проверяем. Теперь, открывая файлы с помощью GVim из Nautilus, все они будут в одном окне.
P.S. Естественно, у вас должен быть установлен vim-gnome.

2012-05-10

Ubuntu: открыть файл любым приложением. Борьба со стандартным (не)функционалом.


А ещё в Ubuntu последних версий есть такая засада: нельзя произвольно открыть файл из файлового менеджера Nautilus нестандартным приложением. Например, мне хотелось, чтобы скрипты открывались в GVim, причем не каждый в отдельном окне, а все в одном, но в разных буферах. Для этого я написал bash-скрипт, сделал его исполняемым, и собрался было открывать файлы им... А вот шиш вам. Выбирай только из списка стандартных, установленных как положено приложений, которые, по мнению дистрибутива, подходят содержимому открываемого файла. Куда ты катишься, Ubuntu...
Ну да ладно. Хоть и через Китай, но это можно сделать. Поможет нам nautilus-actions, который мы установим:
sudo apt-get install nautilus-actions
А дальше всё просто. Запускаем и создаём правило.




В принципе, этого достаточно. Но настроек и фильтров масса, сами разберётесь.

2012-04-13

Установка IE8 в Ubuntu

Для это я использовал банальный playonlinux, в репозитариях есть, устанавливаем. Но, после установки в нем IE8, этот самый IE8 не запускается. После некоторых раздумий над открытым файлом ~/.PlayOnLinux/shortcuts/Internet Explorer 8
заменил это

на это

и ослик запустился. Напартачили в POL.

2012-04-05

MySql Workbench в Ubuntu 12.04

MySql Workbench пришел на смену предыдущим инструментам с графическим интерфейсом от  производителя. Скачать можно здесь. Однако, при установке на Ubuntu 12.04 ругается на отсутствие пакета libzip1, которого нет в репозитариях, а есть libzip2, но это его не устраивает. Решается сия заморочка следующим образом: устанавливаем libzip1 из пакетов предыдущего дистрибутива. Вот ссылка на скачивание файла:
https://answers.launchpad.net/ubuntu/oneiric/i386/libzip1/0.9.3-1

P.S. Как было верно замечено товарищем Alex, программа есть в репозитариях официального релиза. Устанавливать можно из репозатария:
sudo apt-get install mysql-workbench

2012-04-02

Установка DeadBeef в Ubuntu 12.04

Вообще-то это отличный плэйер (или плеер? Или как правильно то?). Но, при установке как положено, процесс не увенчивается успехом.

sudo add-apt-repository ppa:alexey-smirnov/deadbeef
sudo apt-get update
sudo apt-get install deadbeef

Фокус в том, что в строку репозитария автоматически дописывается название текущего дистрибутива, в результате apt лезет туда, где еще ничего нет. Поэтому, открываем и правим:


sudo gedit /etc/apt/sources.list.d/alexey-smirnov-deadbeef-precise.list

Заменяем precise на oneiric, сохраняем, а потом уже


sudo apt-get update
sudo apt-get install deadbeef

принесет желаемое счастье.

2012-04-01

Установка "нафаршированного" ffmpeg в Ubuntu


sudo apt-get build-dep ffmpeg
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev libopenjpeg-dev \
libx264-dev libxvidcore-dev libx264-dev libopenjpeg-dev   libasound2-dev \
libdc1394-22-dev libgsm1-dev libimlib2-dev libraw1394-dev libsdl1.2-dev \
libschroedinger-dev libspeex-dev libtheora-dev libvorbis-dev libx11-dev \
libxext-dev libxvmc-dev quilt texi2html zlib1g-dev libfaad-dev libdirac-dev \
libfaac-dev libmp3lame-dev frei0r-plugins-dev libdirac-dev libfaac-dev
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg-$(date +"%m-%d-%y")
cd ffmpeg-$(date +"%m-%d-%y")
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc \
--enable-x11grab --enable-gray --enable-small --enable-runtime-cpudetect \
--enable-hardcoded-tables --enable-memalign-hack --enable-bzlib --enable-frei0r \
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 \
--enable-libfaac --enable-libgsm --enable-libopenjpeg --enable-libschroedinger \
--enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx \
--enable-libx264 --enable-libxvid --enable-zlib --enable-pic --enable-sram \
--enable-libmp3lame \
--enable-extra-warnings
make
sudo make install
Примечание: в LinuxMint 15 XFCE x64 потребовалось включить репозитарии с исходниками (по умолчанию выключены) и установить libjack-dev отдельно отсюда

2012-02-29

Ubuntu 12.04 - как-то все расплывчато...

Установил для пробы Ubuntu 12.04 LTS, не релиз, но уже близко. С помощью утилиты dconf-tools поставил сглаживание шрифтов на максимум, но все равно они были не такими четкими, как в предыдущей версии. Хотел было откатиться назад, но тут пришло в голову проверить настройки видеокарты. Обычно я туда никогда не лезу, но вот... Стоило поменять вот это


на это


то есть Auto на 60 Hz, как все стало просто прекрасно. Не так и сложно для карт Nvidia.
Надеюсь, кому-то поможет.

2012-02-21

Ubuntu и стандартные каталоги

По умолчанию в Ubuntu присутствуют несколько стандартных каталогов - Музыка, Изображения, Видео, Документы, Рабочий стол. При смене языка ОС предлагает переименовывать их. Вобщем, может возникнуть некоторая путаница, и захочется поправить самостоятельно системные пути к этим папкам. Они находятся в файле в домашнем каталоге. Правим:
gedit ~/.config/user-dirs.dirs
Получаем нечто такое:

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Video"

Правим, как нам угодно. Красота.

Ubuntu 11.10 и parcellite - нет значка в трее

Так как трей уже не тот, приходится производить некоторые акробатические этюды. Итак, в консоли пишем да запускаем установку нужных пакетов:
sudo apt-get install parcellite dconf-tools
Это понятно, ставим parcellite и утилиту правки реестра конфигурации.
Жмем Alt-F2 и набираем dconf-editor. Там лезем в ветку desktop-unity-panel, там единственный параметр systray-whitelist, который определяет, каким приложениям можно в трей залезать. Добавляем туда нашего героя, т.е. дописываем в хвост
, 'parcellite'
жмем, Enter, перелогиниваемся, запускаем Parcellite - вот он, голубчик.

2012-02-02

PHP, кодировки и строковые функции


Время от времени возникает у разработчиков проблема - не желают работать стандартные функции strtolower, strtoupper, ucfirst. Особенно это актуально для сайтов, в которых есть файлы нескольких видов кодировок. Видел я решение самописное, вот такое:
strtr(
    $s,
    'йцукенгшщзхъфывапролджэячсмитьбюё',
    'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ'
);
strtr(
    $s,
    'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ',
    'йцукенгшщзхъфывапролджэячсмитьбюё'
);
strtr(
    substr($s,0,1),
    'йцукенгшщзхъфывапролджэячсмитьбюё',
    'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ'
).substr($s,1) ;

При использовании кодировки UTF-8 начинают сбоить и такие методы. С радостью обнаружил готовые функции, предназначенные для работы с многобайтными кодировками. Вы легко это найдете, но пусть хорошей информации будет побольше.
mb_convert_case($str, $mode [, $encoding ]);
$str - строка для обработки.
$mode может быть MB_CASE_UPPER (верхний регистр), MB_CASE_LOWER (нижний регистр) или MB_CASE_TITLE (первая буква в верхнем регистре).
$encoding может быть, например 'UTF-8'. Если не указывать, то вместо него будет использовано значение внутренней кодировки.

Есть укороченные варианты для MB_CASE_UPPER и MB_CASE_LOWER:
mb_strtolower($str [, $encoding]);
mb_strtoupper($str [, $encoding]);

P.S. Прошу не судить строго за бояны.