Марк Шаттлворт* дал интервью на русском языке! Он рассказал о своих впечатлениях от полёта в космос: «Этот полет оказался очень значимым для меня. Во-первых, я мечтал о нем. Космос мне всегда казался платформой для вдохновения, образования и технологии. Во-вторых, я серьезно готовился к полету. На все ушло около года, при этом семь месяцев я прожил в Звездном городке под Москвой. Меня там тренировали, и мне самому действительно хотелось стать настоящим членом экипажа, а не пассажиром. Весь прожитый год – это и опыт физической работы, и определенные умственные упражнения, а в целом это был очень целостный опыт.»
Ещё Марк много говорит о том, почему и как развивается проект Ubuntu, дружественного и удобного варианта GNU/Linux.
*) Марк Шаттлворт - второй космический турист, основатель компании Thawte, и, с недавнего времени, проекта Ubuntu.
20061207
20061123
Bluetooth: спаривание телефона и компьютера (bluez-passkey-gnome)
Я пользуюсь Nokia 6021 и USB-модулем Bluetooth для доступа в интернет через GPRS/EDGE, когда другого доступа нет. Некоторое время назад я описал подключение GPRS/EDGE в GNU/Linux в викиучебнике.
Дополнение: подключение GPRS «без коммандной строки» (используя KPPP) хорошо описал в своём блоге SIR.
Недавно после обновления системы я заметил, что соединение между компьютером и телефоном больше не устанавливается. При попытке спарить телефон и компьютер, на телефоне запрашивался пароль, и соединение благополучно разрывалось с сообщением, что PIN неверный, хотя везде где можно в
Похоже, что причина в изменении работы
Рецепт сопряжения Bluetooth-телефона и Linux-компьютера
Шаг 1: установить
Например, так:
После этого при запуске рабочего стола в системном лотке будет появляться значок Bluetooth. Это Bluetooth Manager. Чтобы не перезапускать сессию пользователя, первый раз его можно запустить как
Шаг 2: поправить /etc/bluetooth/hcid.conf
Обычно этот шаг не потребуется. На всякий случай вот конфигурация моего
Шаг 3: спарить устройства
Я обычно это делаю такой командой:
но можно проделать то же самое уже и при нормальном установлении GPRS-соединения.
Когда на телефоне появиться запрос, ввести на нём пароль. После этого иконка Bluetooth в системном лотке начнёт мигать. Нажмите на нее, введите тот же пароль в появившемся диалоговом окне. Чтобы не повторять эту операцию каждый раз, в настройках Bluetooth на телефоне откройте список сопряжённых устройств и разрешите автоподключение без подтверждения для только что добавленного устройства.
Такой способ работает у меня с bluez-utils 3.7-1 и bluez-passkey-gnome 0.5-2.
Дополнение: подключение GPRS «без коммандной строки» (используя KPPP) хорошо описал в своём блоге SIR.
Недавно после обновления системы я заметил, что соединение между компьютером и телефоном больше не устанавливается. При попытке спарить телефон и компьютер, на телефоне запрашивался пароль, и соединение благополучно разрывалось с сообщением, что PIN неверный, хотя везде где можно в
/etc/bluetooth
был указан тот же самый правильный PIN.Похоже, что причина в изменении работы
bluez-utils
. Поскольку Bluetooth предназначен для использования пользователями, у которых может и не быть прав на изменение общесистемных настроек, ввод пароля должен осуществляться пользовательской программой. Согласно информации в /usr/share/doc/bluez-utils/README.Debian.gz
в качестве такой программы рекомендуется bluez-passkey-gnome
. Итак,Рецепт сопряжения Bluetooth-телефона и Linux-компьютера
Шаг 1: установить
bluez-passkey-gnome
Например, так:
# aptitude install bluez-passkey-gnome
После этого при запуске рабочего стола в системном лотке будет появляться значок Bluetooth. Это Bluetooth Manager. Чтобы не перезапускать сессию пользователя, первый раз его можно запустить как
bt-applet
(например, через комбинацию клавиш Alt+F2 в Gnome).Шаг 2: поправить /etc/bluetooth/hcid.conf
Обычно этот шаг не потребуется. На всякий случай вот конфигурация моего
hcid.conf
:options {
autoinit yes;
security user;
pairing multi;
}
device {
name "jx-%d"; # это имя, под которым комьютер будет виден на телефоне
class 0x3e0100;
iscan enable; pscan enable;
lm accept;
lp rswitch,hold,sniff,park;
}
Шаг 3: спарить устройства
Я обычно это делаю такой командой:
# echo ATZ > /dev/rfcomm0
но можно проделать то же самое уже и при нормальном установлении GPRS-соединения.
Когда на телефоне появиться запрос, ввести на нём пароль. После этого иконка Bluetooth в системном лотке начнёт мигать. Нажмите на нее, введите тот же пароль в появившемся диалоговом окне. Чтобы не повторять эту операцию каждый раз, в настройках Bluetooth на телефоне откройте список сопряжённых устройств и разрешите автоподключение без подтверждения для только что добавленного устройства.
Такой способ работает у меня с bluez-utils 3.7-1 и bluez-passkey-gnome 0.5-2.
20061121
Как сделать видео из серии картинок
Мне часто приходится делать видеофайл из последовательности изображений. Это очень просто делается с помощью
Вариант 1: делаем видео с
Предположим, имеется набор изображений одинакового разрешения в формате JPEG, и файлы с изображениями названы таким образом, что
Собрать "кадры" в "фильм" можно так:
Файлы полученные таким образом воспроизводятся, насколько мне известно, без проблем любым видео-проигрывателем и в Linux, и в Windows.
Вариант 2: делаем видео с
Можно тоже самое сделать и с помощью
Чтобы сделать видео в другом формате, меняем имя файла на выходе, например, возможны такие варианты:
Пользователям Ubuntu для этого, вероятно, потребуется поставить пакеты с полноценным, неурезанным
mencoder
(входящего в проект mplayer
) или ffmpeg
. Вначале о mencoder
.Вариант 1: делаем видео с mencoder
Предположим, имеется набор изображений одинакового разрешения в формате JPEG, и файлы с изображениями названы таким образом, что
$ ls -1 *.jpgперечисляет будущие "кадры" в нужном порядке.
Собрать "кадры" в "фильм" можно так:
$ mencoder "mf://*.jpg" -vf scale=320:-11 -oac copy -ovc lavc -lavcopts vcodec=msmpeg4:vbitrate=2000 -ffourcc MP43 -o "output.avi"Эта команда создаёт видео-файл
output.avi
, с шириной кадра 320 пикселей и сохранением пропорций кадра (-11
). Видеопоток сжимается кодеком msmpeg4, это позволит просматривать ваш видеофайл пользователям Windows, у которых дополнительных кодеков не установлено, для этого же служит и ключ -ffourcc MP43
. Без него Windows Media Player не догадается о своей способности воспроизвести файл. Величина битрейта (vbitrate=2000
) влияет на качество видео: чем больше значение, тем меньше будут заметны артефакты сжатия, но и тем больше будет размер полученного файла.Файлы полученные таким образом воспроизводятся, насколько мне известно, без проблем любым видео-проигрывателем и в Linux, и в Windows.
Вариант 2: делаем видео с ffmpeg
Можно тоже самое сделать и с помощью
ffmpeg
. Вначале можно единообразно переименовать все исходные файлы, чтобы имена были, например, frame0000.jpg
: $ i=0 ; for f in *.jpg ; do mv "$f" $(printf "frame%04d.jpg" $i) ; i=$((i+1)) ; doneЗатем можно сделать собственно видео. Например, чтобы сделать видео в формате Flash (FLV):
$ ffmpeg -f image2 -r 2 -i frame%04d.jpg -s 320x240 -y -an -r 24 out.flvЗдесь
-r 2
указывает частоту кадров во входном потоке (две картики в секунду), -i frame%04d.jpg
определяет шаблон для имён файлов с отдельными кадрами, -s 320x240
масштабирует кадры, -y
говорит молча перезаписать файл с результатом, -an
говорит не писать звук, -r 24
устанавливает частоту кадров в видеопотоке на выходе. Можно в середине указать ещё -sameq
, чтобы сохранять качество картинки насколько это возможно.Чтобы сделать видео в другом формате, меняем имя файла на выходе, например, возможны такие варианты:
$ ffmpeg -f image2 -r 2 -i frame%04d.jpg -s 320x240 -y -an -r 24 -vcodec msmpeg4 -vtag MP43 out.avi
$ ffmpeg -f image2 -r 2 -i frame%04d.jpg -s 320x240 -y -an -r 24 -vcodec mpeg4 out.avi
$ ffmpeg -f image2 -r 2 -i frame%04d.jpg -s 320x240 -y -an -r 24 -vcodec libx264 out.avi
Пользователям Ubuntu для этого, вероятно, потребуется поставить пакеты с полноценным, неурезанным
ffmpeg
. На сегодня (2009-04) они называются libavcodec-unstripped-51
и libavcodec-unstripped-52
.
20061117
Bash: Как обработать несколько файлов (уменьшить разрешение фото)
Допустим, у Вас есть некоторое количество фотографий, отснятых во время последней прогулки или поездки. Скорее всего, разрешение это фотографии в разрешении 3-6 мегапикселей. Это значит, что размер каждого файла с фотографией 1-2 мегабайта.
Этот размер чаще всего избыточен для простого выкладывания фотографии в сети или отправки по электронной почте. Обычно для просмотра на экране вполне годятся фотографии с разрешением 1 мегапиксель и менее.
Создать копии в низком разрешении из набора фотографий в высоком разрешении можно, конечно, вручную, загружая каждую фотографию в графический редактор, уменьшая и сохраняя под другим именем или в другом месте. Можно это сделать и без графического редактора, с помощью программы
Программа
А если файлов много? Просто и быстро это можно сделать сделать одной командой командной оболочки выполненной в каталоге с фотографиями:
Что делает эта команда: создаёт подкаталог
Программа ковертации сохраняет уменьшенные изображения в подкаталоге
Набор команд между
Конструкцию
Этот размер чаще всего избыточен для простого выкладывания фотографии в сети или отправки по электронной почте. Обычно для просмотра на экране вполне годятся фотографии с разрешением 1 мегапиксель и менее.
Создать копии в низком разрешении из набора фотографий в высоком разрешении можно, конечно, вручную, загружая каждую фотографию в графический редактор, уменьшая и сохраняя под другим именем или в другом месте. Можно это сделать и без графического редактора, с помощью программы
convert
из пакета ImageMagick:$ convert -quality 90 -resize 640x640 большое-фото.jpg уменьшенное-фото.jpg
Программа
convert
позволяет автоматизировать многие операции обработки графики. В данном случае она берёт файл (большое-фото.jpg
), уменьшает до размера, не превышающего 640x640 (-resize 640x640
), и сохраняет в формате JPEG с уровнем качества 90% (-quality 90
) уменьшенное изображение в файле уменьшенное-фото.jpg
.А если файлов много? Просто и быстро это можно сделать сделать одной командой командной оболочки выполненной в каталоге с фотографиями:
$ mkdir lowres; for f in *.jpg ; do convert -quality 90 -resize 640x640 "$f" "lowres/${f%.jpg}-640.jpg" ; done
Что делает эта команда: создаёт подкаталог
lowres
в текущем каталоге (mkdir lowres
); далее для всех файлов с разрешением .jpg
(for f in *.jpg ; do ... ; done
) вызывает программу конвертации (convert
).Программа ковертации сохраняет уменьшенные изображения в подкаталоге
lowres
под именем с окончанием -640.jpg
. Так, если в исходном каталоге были изображения с именами мама.jpg
, папа.jpg
, я.jpg
, то после выполнения указанной команды должен появиться подкаталог lowres/
с изображениями мама-640.jpg
, папа-640.jpg
, я-640.jpg
. Изменённые имена файлов позволят не спутать их с исходными изображениями в высоком разрешении.Набор команд между
do
и done
повторяется несколько раз, для каждого файла подходящего по шаблону *.jpg
. Имя обрабатываемого файла при этом хранится в "переменной" f
. Запись $f
позволяет получить это имя файла, а ${f%.jpg}
отсекает (%
) от имени файла окончание .jpg
. Обратите внимание, что имена файлов берутся в двойные кавычки: "$f"
, "${f%.jpg}-640.jpg"
-- это позволяет обрабатвать также имена файлов содержащие пробелы.Конструкцию
for f in шаблон ; do что сделать с каждым файлом ; done
удобно использовать и для многих других целей. Например, для автоматического переименования или копирования файлов.
20061116
Как собирать программы из исходников
Много лет назад, когда я только начинал пользоваться линуксом, я часто сталкивался с тем, что какой-нибудь нужной или интересной мне программы в моём дистрибутиве не было, или была, но какой-нибудь не той версии.. И тогда надо было собирать её из исходников. Это занятие мне казалось страшным и сложным.
Сейчас такая ситуация случается гораздо реже, благо установка и обновление программ в Debian больше напоминает заказ в ресторане: хочу это, хочу то -- подождите -- готово! Однако умение собирать программы из исходников рано или поздно пригождается практически любому пользователю свободного программного обеспечения. И сложного в этом ничего нет.
Достаточно один раз в жизни услышать волшебное заклинание: "
Сборку программы можно сравнить с выпечкой пирога. Чаще всего, вначале надо взять все необходимые ингридиенты (исходники),
потом смешать их в нужном порядке (подготовить исходники к сборке,
Следует отметить, что в данном случае для выпечки необходима кухня и печь. Также и для сборки программы необходимы инструменты разработчика. Обычно это включает в себя как минимум компилятор и сопутствующие ему программы, как например утилита
Итак, все свободные программы доступны в виде исходного кода. Это полуфабрикат программы. Из него легко можно собрать саму программу, а можно и использовать для создания какой-нибудь новой программы. По-английски исходный код называется source code.
Шаг 1: берём исходники
Необходимо скачать и распаковать архив с исходным кодом программы. Например, можно скачать программу hello-2.1.1. Обычно исходники следует брать с сайта разработчиков программы.
Распаковать архив можно так:
(Не забывайте, что в большинстве случае нажатие клавишиTab позволяет дополнить имя файла, введя лишь несколько первых символов). При этом содержимое архива будет распаковано в тот же каталог, в котором находится архив.
Перейдите в каталог с исходным кодом:
Шаг 2: configure (месим тесто)
Прочитайте файлы
В большинстве случае для подготовки исходников к сборке потребуется выполнить только одну команду:
Она проверит наличие всех необходимых условий (библиотек и других программ) в Вашей системе, и приготовит исходный код к их использованию. Обратите внимание на символы "
На этом же этапе можно указать и куда именно надо ставить программу. Хотя в большинстве случаев рекомендуется ставить "самосборные" программы в каталог
Внимательно читайте что пишется на экране при подготовке исходников. Если всё нормально, то закончится она должна чем-нибудь вроде
Если же появляются какие-то сообщения об ошибках, значит чего-то на вашей "кухне" для приготовления этой программы видимо не хватает. Чаще всего какой-нибудь библиотеки. Какой -- подскажет вывод программы
Шаг 3: make (в печь!)
Если предыдущая стадия закончилась нормально, то теперь можно ставить наш полуфабрикат в печь. То есть запускать процесс сборки программы. Обычно он происходит автоматически и управляется командой
Для больших программ этот процесс может занимать довольно много времени. Однако наша программа-пример
Если сборка закончилась сообщением вроде этого:
то значит, что-то пошло не так, и сборка не получилась. Однако чаще всего сборка заканчивается без ошибок.
Шаг 4: make install (кушать подано!)
Собственно всё. Пирог можно подавать к столу, а собранную программу устанавливать в систему. Делается это так:
Если на шаге подготовки исходников Вы выбрали вариант установки в домашний каталог (как я), то не забудьте добавить подкаталог
Можете запускать собранную программу:
Она пишет на экран "Здравствуй, мир!". Всё ОК.
Надеюсь, что эти инструкции будут понятны даже совсем начинающим пользователям линукс. Мне в своё время не хватало таких инструкций :)
P.S. Хочу, однако, заметить, что сборка из исходников несёт с собой целый ряд неудобств. Первое и наиболее существенное из них -- удалять такую программу гораздо хлопотнее. В случае с
в каталоге с её исходным кодом, но не всегда этот каталог сохраняется в целостности, да и не все авторы программ должным образом готовят исходные тексты к
Поэтому лучше пользоваться готовыми пакетами, поставляемые с Вашим дистрибутивом. Так, чтобы установить программу
или
Сейчас такая ситуация случается гораздо реже, благо установка и обновление программ в Debian больше напоминает заказ в ресторане: хочу это, хочу то -- подождите -- готово! Однако умение собирать программы из исходников рано или поздно пригождается практически любому пользователю свободного программного обеспечения. И сложного в этом ничего нет.
Достаточно один раз в жизни услышать волшебное заклинание: "
configure
, make
, make install
". Дальше я объясню, что это значит.Сборку программы можно сравнить с выпечкой пирога. Чаще всего, вначале надо взять все необходимые ингридиенты (исходники),
потом смешать их в нужном порядке (подготовить исходники к сборке,
./configure
), а затем залить в форму и поставить в печь (запустить сборку, make
). Спустя некоторое время из печи можно вынимать готовый к употреблению пирог (устанавливать готовую программу, make install
). Следует отметить, что в данном случае для выпечки необходима кухня и печь. Также и для сборки программы необходимы инструменты разработчика. Обычно это включает в себя как минимум компилятор и сопутствующие ему программы, как например утилита
make
. Это и есть "печь". Потребуется и место, где можно всем этим заняться -- командная строка (терминал) ("кухня"). Если у вас есть и кухня, и печь, то можете начинать готовить.Итак, все свободные программы доступны в виде исходного кода. Это полуфабрикат программы. Из него легко можно собрать саму программу, а можно и использовать для создания какой-нибудь новой программы. По-английски исходный код называется source code.
Шаг 1: берём исходники
Необходимо скачать и распаковать архив с исходным кодом программы. Например, можно скачать программу hello-2.1.1. Обычно исходники следует брать с сайта разработчиков программы.
Распаковать архив можно так:
$ tar zxvf hello-2.1.1.tar.gz
(Не забывайте, что в большинстве случае нажатие клавиши
Перейдите в каталог с исходным кодом:
$ cd hello-2.1.1
Шаг 2: configure (месим тесто)
Прочитайте файлы
INSTALL
и README
, если они есть в архиве исходного кода. В них может содержаться важная информация о том, как устанавливать и использовать программу.В большинстве случае для подготовки исходников к сборке потребуется выполнить только одну команду:
hello-2.1.1$ ./configure
Она проверит наличие всех необходимых условий (библиотек и других программ) в Вашей системе, и приготовит исходный код к их использованию. Обратите внимание на символы "
./
" в начале команды. Они указывают, что необходимо выполнить команду configure
из текущего каталога, то есть команду configure
поставляемую вместе с исходным текстом программы, которую мы собираем.На этом же этапе можно указать и куда именно надо ставить программу. Хотя в большинстве случаев рекомендуется ставить "самосборные" программы в каталог
/usr/local
, иногда это невозможно. Так, если у пользователя нет прав администратора, например на общественном компьютере, то установить программу можно только в свой домашний каталог. Чтобы установить программу в домашний каталог нужно указать дополнительный параметр команде configure
:hello-2.1.1$ ./configure --prefix=$HOME
Дополнение: на самом деле, я обычно устанавливаю программы с префиксом/usr/local/stow/название-программы
, а после установки использую утилитуstow
, чтобы поставить символические ссылки на файлы программы в системных каталогах. Использование утилитыstow
позволяет мне потом легко удалить установленную программу, не связываясь при этом с более трудоёмкой сборкой пакетов.
Внимательно читайте что пишется на экране при подготовке исходников. Если всё нормально, то закончится она должна чем-нибудь вроде
config.status: creating Makefile
config.status: creating contrib/Makefile
config.status: creating doc/Makefile
config.status: creating intl/Makefile
...
Если же появляются какие-то сообщения об ошибках, значит чего-то на вашей "кухне" для приготовления этой программы видимо не хватает. Чаще всего какой-нибудь библиотеки. Какой -- подскажет вывод программы
configure
Шаг 3: make (в печь!)
Если предыдущая стадия закончилась нормально, то теперь можно ставить наш полуфабрикат в печь. То есть запускать процесс сборки программы. Обычно он происходит автоматически и управляется командой
make
:hello-2.1.1$ make
Для больших программ этот процесс может занимать довольно много времени. Однако наша программа-пример
hello
должна собраться быстро.Если сборка закончилась сообщением вроде этого:
make: *** [all] Ошибка 2
то значит, что-то пошло не так, и сборка не получилась. Однако чаще всего сборка заканчивается без ошибок.
Шаг 4: make install (кушать подано!)
Собственно всё. Пирог можно подавать к столу, а собранную программу устанавливать в систему. Делается это так:
hello-2.1.1$ make install
Если на шаге подготовки исходников Вы выбрали вариант установки в домашний каталог (как я), то не забудьте добавить подкаталог
~/bin
в переменную PATH
:$ export PATH=$HOME/bin:$PATH
Можете запускать собранную программу:
$ hello
Здравствуй, мир!
Она пишет на экран "Здравствуй, мир!". Всё ОК.
Надеюсь, что эти инструкции будут понятны даже совсем начинающим пользователям линукс. Мне в своё время не хватало таких инструкций :)
P.S. Хочу, однако, заметить, что сборка из исходников несёт с собой целый ряд неудобств. Первое и наиболее существенное из них -- удалять такую программу гораздо хлопотнее. В случае с
hello
это можно сделать с помощью командыhello-2.1.1$ make uninstall
в каталоге с её исходным кодом, но не всегда этот каталог сохраняется в целостности, да и не все авторы программ должным образом готовят исходные тексты к
make uninstall
Поэтому лучше пользоваться готовыми пакетами, поставляемые с Вашим дистрибутивом. Так, чтобы установить программу
hello
в Debian GNU/Linux достаточно всего одной команды:# aptitude install hello
или
$ sudo aptitude install hello
Оправдание блога
За годы использования свободных программ мне не раз приходилось решать разные вопросы, связанные с их настройкой или наиболее эффективным использованием.
В какой-то момент я осознал, что некоторые "рецепты" полезно сохранять, и стал собирать их у себя на диске. Сделал что-нибудь, настроил, а всякие "ответы с форумов" и "HOWTO" -- в архив. Чтобы если придётся ещё раз, уже под рукой было. Оказалось удобно.
А потом подумал, что некоторые вещи могли бы быть полезны не только мне. Так что если не буду лениться, буду их сюда записывать. Авось и кому-то ещё пригодятся :)
В какой-то момент я осознал, что некоторые "рецепты" полезно сохранять, и стал собирать их у себя на диске. Сделал что-нибудь, настроил, а всякие "ответы с форумов" и "HOWTO" -- в архив. Чтобы если придётся ещё раз, уже под рукой было. Оказалось удобно.
А потом подумал, что некоторые вещи могли бы быть полезны не только мне. Так что если не буду лениться, буду их сюда записывать. Авось и кому-то ещё пригодятся :)
Подписаться на:
Сообщения (Atom)