2008-12-26

MySQL Query Browser: работа с удаленной БД через SSH

Имеем: удаленный сервер MySQL, в моем случае это база данных сайта на masterhost.
Хотим: работать с данными не через phpMyAdmin по http, а используя удобный и привычный MySQL Query Browser и MySQL Administrator на локальном компьютере.
Нужно: клиент SSH, ну и соответственно логины-пароли доступа к удаленому аккаунту.
Легко:
1) Если на локальном компьютере установлен сервер MySQL - отключаем, освобождая порт:
$ sudo /etc/init.d/mysql stop
2) Подключаемся по протоколу SSH, вводя пароль когда попросят:
$ ssh -C uXXXXXX@uXXXXXX.ssh.masterhost.ru -L 3306:uXXXXXX.mysql.masterhost.ru:3306
3) Открываем MySQL Query Browser, вводим host - localhost (или 127.0.0.1), порт - 3306, логин, пароль и имя базы данных на сервере.
Пользуемся с удовольствием.

2008-12-23

Копирование сбойных файлов с CD/DVD в Linux

Прислали мне диски с конференции, наконец-то. Естественно, чтобы смотреть видео с них на nokia n810, надо конвертировать их в видеофайлы, к примеру mkv. Но вот беда! Последний трек на последнем диске оказался с ошибкой, и ни в какую не желал копироваться полностью. Выводилась Input/Output error. Поиски решения навели меня на статью Восстановление данных R.LAB, откуда я взял вот что:

dd if=/dev/scd0 of=~/video/file.iso bs=8K conv=noerror,sync

где:
bs=8K для пущей скорости, noerror не дает вылетать на ошибках, sync дописывает проблемные блоки нулями, чтоб не возникло смещений на приемнике.
В результате создается образ диска, ошибки выловлены, плохие участки заменены нулями. Затем создаем каталог и монтируем в него получившийся образ:

sudo mkdir /media/iso
sudo mount -t iso9660 -o loop ~/video/file.iso /media/iso/


Теперь можно и копировать. Видео конечно не ахти как выглядит на покореженных участках, зато  его можно посмотреть. После копирования отмонтируем образ:

sudo umount /media/iso

При желании удаляем образ, все-таки 4,5 гигабайт не лишние.
P.S. О том, как бороться с ошибками при записи дисков, хорошо написано здесь.

2008-12-18

PDF, Ubuntu, Python: история продолжается

Продолжая тему о работе с PDF в Ubuntu расскажу, с какими сложностями я столкнулся, когда стал решать задачу о внесении метаданных в PDF документ. Нужно всего лишь в определенные страницы сосканированного проекта добавить скрытые пометки, которые помогли бы в поиске этих страниц (а это, как правило, чертеж какой-нибудь).

Можно внести информацию о всем документе с помощью упомянутой ранее утилиты pdftk таким образом:
$ pdftk file.pdf dump_data output metainfo

В файл metainfo запишется информация следующего характера:
InfoKey: Title
InfoValue: untitled
InfoKey: Producer
InfoValue: ReportLab http://www.reportlab.com
InfoKey: Author
InfoValue: anonymous
InfoKey: Subject
InfoValue: unspecified
InfoKey: CreationDate
InfoValue: 20081217165436
PdfID0: ebd25ab8427fa1508e9924204f74b274
PdfID1: ebd25ab8427fa1508e9924204f74b274
NumberOfPages: 1


Соответственно, InfoKey - ключ, InfoValue - значение. Думаю, тут все понятно, двинем дальше. Теперь мы можем поменять значения ключей и сохранить файл, а потом изменить значение метаданных в нашем PDF файле:

$ cp file.pdf file.cp.pdf
$ pdftk file.cp.pdf update_info metainfo output file.pdf
$ rm file.cp.pdf


Зачем такой огород? А затем, что pdftk умеет сохранять метаданные только в другой файл, поэтому мы создаем временный, потом обновляем его данные, сохраняя в исходный, и удаляем временный. Вот петрушка... Но это еще цветочки. Ягодки в том, что если прописать в файле с метаданными текст на русском языке, то evince покажет его крякозябрями, а если попробовать извлечь инфо из обновленного файла, то увидим вместо наших русских буковок вот примерно такое: "￐ᅠ￑テ￑", что совсем не соответствует желаемому. К тому же, так задача пометок отдельных страниц не решается. Копаем дальше.

Эта же утилита умеет пристегивать к отдельным страницам PDF документа файлы. Во! Это уже что-то! Составляем файл с нужными данными (рекомендуется HTML или Excel файл, потому что тогда Adobe Reader адекватно среагирует, то есть откроет его). Пристегиваем файл с информацией к первой странице PDF:

$ cp file.pdf file.cp.pdf
$ pdftk file.cp.pdf attach_files to_page 1 output file.pdf
$ rm file.cp.pdf


Ну наконец-то. Неужели это все? Проблема решена? Щазз! Мы только подходим к трудностям. Ведь нам надо как-то извлечь оттуда прикрепленные файлы. А вот тут нас ждет 2 проблемы.

1) Не нашел (а я искал!) в pdftk возможности извлечения файлов выборочно, из определенных страниц, только все скопом:
$ pdftk file.pdf unpack_files output unpack/
Здесь все файлы извлекаются в папку unpack, если она конечно существует, иначе будет error. Одноименные файлы перезаписываются.

2) Все шло более-менее гладко, пока я экспериментировал с файлами PDF журнала LinuxFormat. И картина изменилась, когда дело дошло до настоящих чертежей, отсканированных на нашем широкоформатном сканере. Нет, записывать метаданные и даже прикреплять файлы к страницам получалось нормально, но вот когда я попытался извлечь прикрепленные файлы я увидел примерно вот что:
Unhandled Java Exception:
java.lang.NullPointerException
   at java.lang.String.toLowerCase(libgcj.so.81)
   at java.lang.String.toLowerCase(libgcj.so.81)
   at com.lowagie.text.pdf.PdfEncodings.convertToBytes(pdftk)

Все это в различных вариациях на тему некоего libgcj.so.81. Из всего этого я сделал пару выводов: а) pdftk написана на Java, хотя бы частично и б) проблема связана с текстовой информацией в файле.

Вот тут я был озадачен. Текстовой информации в файле не подразумевалось никакой, только одно-единственное изображение. Ладно бы там была какая-нибудь кириллица, и он на кодировках спотыкался. Но ведь неоткуда там тексту взяться! И тем не менее, файлы сторонние обрабатывались на ура, а мои сосканированные - ни в какую.
Сейчас поведаю, через какие извращения я прошел, чтобы превратить мой PDF в корректно обрабатываемый pdftk. Все это я делал на Python, о библиотеках, которые тут приводятся, я говорил чуть раньше.
Приготовились смеяться? Начали!

[файл workpdf.py]

#!/usr/bin/env python
# -*- coding: utf-8 -*-


# Допустим, что файл называется так:
filename="00.pdf"

import os
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics, ttfonts
from pyPdf import PdfFileReader


# Полчение размера страницы в пикселах
input = PdfFileReader(file(filename, "rb"))
p=input.getPage(0)
width = p.mediaBox[2]
height= p.mediaBox[3]


# Починка файла (чтобы convert не ругался)
os.system("pdftk "+filename+" output 01a.pdf")

# Конвертирование его в картинку
os.system("convert 01a.pdf  workpdf_temp_file.jpg")

# Удаление ненужной копии
os.system("rm 01a.pdf "+filename)

# Задаем настройки шрифта
MyFontObject = ttfonts.TTFont('Verdana', '/usr/share/fonts/truetype/msttcorefonts/tahoma.ttf')
pdfmetrics.registerFont(MyFontObject)


# Создаем основу нового PDF
MyCanvas = canvas.Canvas("test.pdf")

# Задаем размеры, равные исходному файлу, добавляем шрифты и тестовый текст
# Не знаю зачем, но видимо pdftk очень хочет найти текст в файле
MyCanvas.setPageSize((width, height))
MyCanvas.setFont("Verdana", 40)
MyCanvas.drawString(-100, -100, "test")


# Добавляем картинку из исходного файла
MyCanvas.drawImage("workpdf_temp_file.jpg",0,0)

# Завершаем и сохраняем файл
MyCanvas.showPage()
MyCanvas.save()


# А теперь барабанная дробь: прикрепляем файл и открепляем его без ошибок!
print os.system("pdftk test.pdf attach_files info to_page 1 output "+filename)
print os.system("pdftk "+filename+" unpack_files output unp/")


# И удаляем никому не нужные теперь файлы
os.system("rm test.pdf workpdf_temp_file.jpg")

Ну как? Животики надорвали? А главной проблемы - извлечения отдельно взятого файла от отдельно взятой страницы многостраничного PDF документа - я так и не решил. Пока не решил. А вы?

2008-12-15

Python и PDF

О том, с помощью чего и как можно работать с документами PDF в консоли я уже упоминал раньше. Несомненно, с помощью pdftk можно кое-чего достичь, и очень часто этого будет вполне достаточно.
Теперь передо мной встала другая задача: динамически вносить измененния в мета-информацию PDF файлов, и очень желательно - автоматически обрезать белые поля, остающиеся после сканирования документов. И оказалось, это не так просто.
С помошью того же pdftk можно получить информацию документа, записать ее в файл, изменить, а потом сделать update этой информации в другой файл. Что-ж, неплохо. Только кириллица там не прижилась, и слишком много телодвижений, да еще вручную. Это не наш метод. Хотя, если придется, то никуда не денешься.
К делу был привлечен Python, к которому я подбираю библиотеки для работы в PDF.
Кандидат номер 1:
pyPdf, ставится из стандартного репозитария Ubuntu (python-pypdf). Его описание, документация и несколько вполне ясных примеров с комментариями есть на сайте производителя. Вот что этот модуль умеет: извлекать информацию из документа, разбивать документ на страницы по отдельным файлам, собирать их в одно, обрезать, собирать многостраничные документы в одну страницу, шифровать и дешифровывать PDF. Минимум необходимого. Но я так и не нашел возможности вносить изменения в мета-информацию, а это то мне и нужно было.
Кандидат номер 2:
ReportLab, тоже есть в репозитарии Ubuntu. Документация обширная, я только начал вникать, но уже понятно, что эта библиотека - для создания документов, а что насчет правки уже мозоль натершей на языке мета-информации? Пока не знаю, возможно я найду возможности все-таки...
У кого есть опыт в этой сфере - не жадничайте, поделитесь! Неужели я один такой?
По поводу обрезки белых полей - глухо, как в танке. Пробовал использовать convert из комплекта ImageMagic и его опции -trim, а также -fuzzy, вроде бы специально предназначенных для такой задачи. Но результат нулевой. Цвета конечно не идеальные, но про -fuzz написано на сайте разработчика, что он как-раз для такого случая! Ан нет, не сработало. Откликнитесь, коллеги, у кого получилось?

2008-12-13

Перезапуск apache, mysql, networking (сеть) и др.

Любого человека, перешедшего на Linux, первое время мучают вопросы, кажущиеся гуру элементарными. Например, я довольно долго не знал, как мне перезапустить сетевые соединения. Перезапускал Ubuntu каждый раз, когда менял содержимое /etc/network/intefaces. Тоже самое было, когда установил LAMP, не знал, как перезапустить apache и mysql. Просто "sudo apache restart" не помогает.
Ну так вот, суть ответа - в папке /etc/init.d/ Там расположены скрипты, которые правильно работают с этими и многими другими службами. Поэтому перезагрузка сети будет выглядеть так:

sudo /etc/init.d/networking restart

Для всего остального вместо networking пишем apache2, mysql и т.п. Кроме restart доступны start, stop и force-reload. Пользуйтесь и наслаждайтесь!

2008-12-12

Утилитка для получения расширения файла

Ну что такое! Может быть, я чего-то не понял?
Понадобилось для скрипта по конвертированию видеофайлов вычислять расширение файла, чтобы заменить его на другое. Например, чтобы сделать такой скрипт:

#!/bin/bash
mkvmerge -o ${1%avi}mkv $1 $2


Это простой пример упаковки видео и аудиоконтента в MKV, где вместо первого аргумента скрипту подсовывается имя видеофайла, вместо второго - имя аудиофайла. Но я же не всегда работаю с avi! Значит, расширение нужно как-то автоматически вычислять.
Честное слово, я искал простой системный способ сделать это. Кроме basename ничего не нашел, но это не то, что нужно. Если он есть - подскажите!
Ну так вот, пришлось взять в руки пилу, молток и SciTE, и сварганить скрипт самому:

[ файл ~/bin/ext.py ]

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

class FileExt:
def __init__(self):
try:
self.ind=sys.argv[1].rindex(".")
self.word=sys.argv[1]
except:
self.ind=sys.argv[0].rindex(".")
self.word=sys.argv[0]
def getext(self):
return self.word[self.ind+1:]

e=FileExt()
print e.getext()


Может быть и не лучший способ, но работает! Теперь мой скрипт может стать таким:

#!/bin/bash
mkvmerge -o ${1%`ext.py $1`}mkv $1 $2


P.S. Более изящный (и короткий) вариант кода:

import sys,os
try:
path,ext=os.path.splitext(sys.argv[1])
print str(ext).lower()
except:
print "Неверный аргумент"

2008-12-09

Кодирование MKV (matroska) для Nokia N810 используя mencoder

Открытия, как обычно, следуют за засадами. Несколько раз сталкивался с проблемами, когда кодировал файлы .mkv. Например, если пытаюсь извлечь видеотрек из .mkv в файл avi - возникает ошибка при воспроизведении, видео идет какимим-то цветными кубиками.
Или рассинхронизируются аудио- и видеопотоки. Или звук становится таким, как будто его эквалайзером загнали на максимум, и страшно жужжит.
Сегодня нашел в сети такой вариант, и вроде бы он нормально отработал. Буду тестировать.

mencoder filein.mkv -o fileout.mkv -of lavf -oac lavc -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:v4mv:vqscal:mpeg_quant -vf scale=-2:240

P.S. Проверил. Хороший метод.

2008-11-20

Настройка сети со Стримом, когда больше одного компьютера

С сентября пользуюсь Стримом. Акадо меня сильно подвело, несколько раз кидало на деньги, две недели не было интернета (может и больше, я уже не проверял), служба поддержки кормила завтраками все это время. В итоге в ужасе сбежал от них.
Ну так вот, о чем это я? А! Установили мне модем по умолчанию, кто имел дело тот знает, какой. У него две возможности коннекта: через LAN и через USB. Я расчитывал перевести модем в режим роутера и подключить свой компьютер с Ubuntu через LAN интерфейс (потому что так проще настраивать). Компьютер жены с Windows XP собирался подключить через USB, дрова для модема на диске есть. Приезжал мастер все это дело подключать, телефонную линию корректировать или кто там его знает что еще. В итоге он мне и настроил модем в режим роутера, конечно, за деньги. Как позже узнал - зря я на это согласился, настройка - дело 2 минут и ее порядок есть на диске к модему. Настроить то настроил, но вот подключение по USB не сделал, сославшись на то, что он торопится, и это просто, и рассказав на словах, как это делается. Ок, я поверил, отправил его домой.
В итоге, долгие бои с модемом и настройками ничего не дали. Так через USB подключиться к интернету и не удалось. Нет, сеть заработала, пинг проходил, модем в сети виден. Но ADSL подключение - ни в какую. "Удаленный компьютер не отвечает". А по LAN все работает хорошо. Пришлось сделать как было при Акадо: жена выходила в интернет через прокси на моем компьютере. Мой замысел, чтобы она могла подключаться к сети не включая мой комп - рухнул.
В итоге пошел я в местное представительство Стрима, сдал этот модем и купил другой, с четырьмя портами LAN и WiFi. Настроил его в режиме роутера, подключил компьютеры, настроил сеть, как указано на диске. А там указано, что надо прописывать статический IP. Ну я и прописал 192.168.1.2 и 192.168.1.3. Но тут как раз и зарыта собака.
Сеть не хотела работать нормально. Если я включал сначала свой комп, а потом ком жены - все было в порядке. Если наоборот - то возникали проблемы, соединение не работало, и иногда исправлялось перезагрузкой модема. Но так ведь быть не должно!
Ответ был найден, когда я посмотрел IP моей Nokia N810, соединенной с интернетом через WiFi. Я ведь не назначал ему IP, а он был выдан модемом. Значит что? - модем выдает их динамически. Странно, что в настройках сети, описанных на диске адрес DNS был указан именно тот, что у модема. Тогда зачем прописывать статический IP?
Все сходится. Если я включаю свой комп первым, он берет IP 192.168.1.2, и точно такой же ему выдало бы DNS. И так далее - 192.168.1.3 получил бы комп жены, но у него такой же прописан в статике.
Вот какая собака порылась. Странно, что в документации к модему это не указано, и надо сначала походить по граблям, пока не дойдет. Ну да ладно, у всех есть недостатки.
Итак, ставим в настройках - получать IP автоматически и все в полном ажуре.

/etc/network/interfaces:
iface eth0 inet dhcp
auto eth0

/etc/resolv.conf:
nameserver 192.168.1.1


Всё.

2008-11-10

О Ruby и холиварах

Решил попробовать изучить Ruby, ну и рельсы заодно. Запасся литературой и приступил. Понравилось, интересно, доступно для понимания.
В ходе поисков информации по этой теме в сети наталкивался на многочисленные холивары между разработчиками на python, php и ruby. Очень это угнетает. Каждый приводит аргументы в пользу своего болота и творчески, с выдумкой обливает грязью чужое. Я прямо на части рвался, не мог решить, чья же сторона мне милее.
PHP использую давно, и привычен вроде как, и удобен, шишки от привычных граблей уже превратились в мозоли. Распространение на хостингах - практически 100%. Неплохо. Десктопное приложение жаль не написать толком.
Python распространен в Linux, и Ubuntu крепко держится за него, всякие скрипты, программы, плагины на питоне очень часто встречаются. Даже для Nokia N810 и других таблеток можно приложения писать - ну не красота ли? Ну и веб-фреймворк вроде как свой есть - Django, недавно был релиз 1 версии.
А Ruby сравнительно недавно вырос. Но у него есть свой бульдозер - Rails. Прост для изучения, чистое ООП, даже работу с БД и ту заточили под него. Сам не знаю, почему я решил за него взяться, вроде к ООП особо никогда не тяготел.
Впрочем, никто же не мешает просто НЕ ВЫБИРАТЬ, а брать то, что удобнее и/или интереснее в данный момент? Кто вообще придумал, что надо выбрать какой-то один язык и отстаивать его, пока пуп не развяжется? PHP рулит. Python рулит. Ruby рулит.
Сумбурно получилось, но что поделаешь.

Найти и уничтожить

Порой простые вещи приносят радость. Вот сегодня, например. Приспичило мне удалить из коллекции музыкальных файлов те, которые без голосов, для караоке. Они обозначены: прямо в названии присутствует фраза "off vocal". А их много таких, папки в подпапках... Запал быстро испарился, уже на третьей директории.

Ладно, ладно, вы знаете что все можно сделать быстро и без лишних телодвижений, будь там хоть тысяча папок, сложенных матрешкой. Но ведь блог не только для вас, а еще и для меня, чтоб потом вспомнить. Так вот, делается все легко и непринужденно, помни, дорогой я:


find -name "*off vocal*.mp3" -exec rm {} \;

2008-11-05

Ubuntu 8.10 и сеть

Как только, так сразу перешел на Ubuntu 8.10. И не испугали возможные глюки, баги и предстоящая работа напильником. А причиной тому - ну наконец-то! - закладки-табы в Nautilus. Это порадовало. Минусы тоже есть, а куда без них? Но пока думаю списать это на малый срок после релиза. Например, Network Manager, хоть и выглядит удивительно насыщенно, огорчил меня в первую очередь. Настройки сети сохранять отказывался категорически. Сразу после установки находит имеющиеся eth-интерфейсы и обзывает их подобно "Auto eth0". Прописав в них настройки и перезагрузив машину удивляемся. Все впустую.
На форуме forum.ubuntu.ru этот вопрос обсуждается. Также, в связи с тем-же багом прокси-сервер squid не хочет подхватывать настройки, которые создает NM (после загрузки X!). Если перезапустить squid после того, как сеть настроится, то все работает.
Для себя я решил проблему кардинально:

1) Удаляем NM с корнем:
    sudo apt-get remove network-manager network-manage-gnome

2) Смотрим, какие сетевые карты есть, их MAC-адреса и имена, данные им в
    /etc/udev/rules.d/70-persistent-net.rules
    У меня это выглядит так:
    # PCI device 0x10ec:0x8167 (r8169)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:17:d9:c4:4a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    # PCI device 0x10ec:0x8139 (8139too)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:08:a1:ab:b4:1f", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

2) Правим вручную настройки сети в /etc/network/interfaces
    auto lo
    iface lo inet loopback

    iface eth0 inet static
    address 192.168.1.3
    netmask 255.255.255.0
    gateway 192.168.1.1

    iface eth1 inet static
    address 192.168.0.1
    netmask 255.255.255.0

    auto eth0
    auto eth1

    # две сетевые карты, eth0 для выхода в интернет через модем Стрима, настроенный в режиме роутера, eth1 - домашняя сеть

3) Прописывем необходимые DNS в /etc/resolv.conf
    nameserver 192.168.1.1
    # прописываю DNS модема-роутера


4) Рестарт

После этого имеем нормально работающую сеть и прокси-сервер.

2008-10-31

Экспорт данных из Excel в MySQL

По работе иногда приходится перебрасывать данные из одного формата в другой, из одной кодировки в другую. Если говорить о данных, то экспорт таблиц из MS Excel в базу данных MS SQL Server 2005 производится на раз, причем простым копированием. Здесь товарищам из корпорации не откажешь в сноровке: взаимная интеграция своих продуктов друг в друга на высоте.
Сегодня по дороге на работу вдруг в голову пришла мысль: а что насчет MySQL? Ведь это дитя уже не маленькое, 5 версия уже не новость. Должно же быть и там нечто такое? Чтобы не делать лишнюю ручную работу, и не гонять данные через Китай по этапам? И не писать скрипты, программы для этой операции? И не искать в интернете программы с кряками?
Странно, но в поиске я натыкался именно на это. И только на десятой ссылке наткнулся на грамотное и простое решение, предусмотренное самими разработчиками MySQL.
Это загрузка данных в таблицу из файла, например формата CSV, в который можно экспортировать данные Excel путем "Сохранить как". Не вдаваясь в подробности, будучи уверен, что вы сами разберетесь в деталях, привожу примеры:

ЗАГРУЗКА В ТАБЛИЦУ ИЗ ФАЙЛА

Данные разделены запятыми, данные ячеек заключены в кавычки, новая строка обозначена символом \n:
LOAD DATA INFILE '/home/user/data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';

СОХРАНЕНИЕ ДАННЫХ ИЗ ТАБЛИЦЫ В ФАЙЛ
SELECT a,b,a+b INTO OUTFILE '/home/user/data.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;

2008-09-08

Удаленный рабочий стол Windows в Ubuntu linux

Несколько раз передо мной вставала задача удаленного администрирования базы данных MSSQL. Когда основной операционной системой был Windows XP все решалось просто - на локальной машине запускался SQL Server Management Studio Express из комплекта MSSQL Server 2005. Через этот менеджер производилось подключение к серверу, будь он на той же машине или в локальной сети.
Когда я стал работать в Ubuntu linux и необходимо было решать те же задачи - я знал два пути: либо пересаживаться за компьютер с WinXP (благо стоит он рядом) и жонглировать клавиатурой и мышкой, либо устанавливать на какой-нибудь эмулятор (например QEMU, VBox или VMWare) тот же WinXP, в нем устанавливать тот самый Management Studio. А там все по старому - коннект к удаленному серверу и поехали.
Но сегодня наткнулся на решение, которое известно каждому админу. Возможно, ты, дорогой читатель, не админ, и моя новость будет тебе приятна и полезна: решение за утилитой rdesktop.
Как оказалось, пользоваться ей не так уж и сложно. Два этапа:
1) На удаленной машине с Windows заходим в "Панель управления -> Система -> Удаленные сеаны" и ставим галочку "Разрешить удаленный доступ к этому компьютеру". В списке разрешенных личностей для доступа должен присутствовать ваш логин.
2) В консоли пишем команду:
rdesktop -d ваш_домен -u логин_в_сети -p пароль_в_сети имя_компьютера
И все! Прочитав руководство по утилите нашел еще несколько хороших параметров, но я уверен, что и вы их найдете без труда.
P.S. Последняя версия (на данный момент это 1.6.0, качается с www.rdesktop.org) позволяет запустить удаленный рабочий стол таким образом, что, хотя полноэкранный режим и закрывает один из рабочих столов, переключаться на другой можно через клавиатуру, и переключение корректно: на одном рабочем столе нормальный гном, на втором - "нормальный" Windows. В 1.5.0 полноэкранный режим обладал странным свойством: как ни переключай рабочие столы, на них будет все тот-же Windows (по крайней мере при включенных эффектах Compiz).

P.S. Устранение некоторых багов rdesktop (обычно с раскладкой клавиатуры) делается путем установки пропатченной версии.

Качаем для i368: http://sys-admin.org/files1/rdesktop/rdesktop_1.6.0-alt1_i386.deb
или для x86_64: http://sys-admin.org/files1/rdesktop/rdesktop_1.6.0-alt1_amd64.deb
Далее:
sudo dpkg -r rdesktop
sudo dpkg -i rdesktop_1.6.0-alt1*
cd /usr/lib
sudo ln -s libcrypto.so.0.9.8 libcrypto.so.6

rdesktop -5 -z -y -u пользователь -p пароль -g разрешениеxэкрана IP_удаленного_компьютера
главная опция "-y" - она говорит использовать raw клавиатуру


Взято отсюда.

2008-09-04

PDF в Ubuntu: несколько рецептов

На работе время от времени требуется производить манипуляции с файлами PDF. В результате проведенных поисков и тестов получены следующие результаты:
Использование пакета pdftk:
sudo apt-get install pdftk
1. Разбор файла на страницы:
pdftk input.pdf burst output page%03d.pdf
Получится пачка файлов с именами page001.pdf, page002.pdf.... page021.pdf и т.п.
2. Извлечение одной или нескольких страниц в отдельный файл:
pdftk input.pdf cat 1 output page1.pdf
pdftk input.pdf cat 5-9 output page5-9.pdf
3. Сборка одного файла из многих:
pdftk *.pdf cat output combined.pdf
pdftk page1.pdf page2.pdf cat output combined.pdf
На этой странице есть еще примеры. Примечание: при обработке файлов с символами кириллицы в названии выдает ошибку, собирает страницы в один файл быстрее, чем ghostscript.

Использование пакета ghostscript:
sudo apt-get install ghostscript
1. Сборка одного файла из множества:
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=combinedpdf.pdf -dBATCH *.pdf

Облегчим себе жизнь скриптами и алиасами!
В папку с пользовательскими скриптами (у меня это ~/bin) поместились файлы:

# Скрипт pdfX. Для работы нужна утилита pdftk
if [ $1 ]; then
if [ $2 ]; then
pdftk $1 cat $2 output page$2.pdf;
else echo "Нужен обязательный параметр: извлекаемые страницы. Указывать или число (например 12) или промежуток чисел (например 2-4)";
fi;
else echo "Нужен обязательный параметр: имя файла pdf";
fi;

Использовать так:
pdfX input.pdf 4-5
pdfX input.pdf 43

# Скрипт pdfXall. Для работы нужна утилита pdftk
if [ $1 ]; then
pdftk $1 burst output page%03d.pdf
else echo "Нужен обязательный параметр: имя файла pdf";
fi;

Использовать так:
pdfXall input.pdf

В файл ~/.bashrc добавлена строчка:
alias pdf2one='gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=combinedpdf.pdf -dBATCH'

После перечитывания файла
~$ . .bashrc
в каталоге с кучей файлов pdf можно использовать команду:
pdf2one *.pdf

2008-09-01

Анапа, пансионат Кассандра

Вот и съездили мы с женушкой на курорт! В целом все было так, как хотелось: тишина, мало людей, песчаный пляж, огромное море... Просто отдохнули телом и душой. Кормили нас на убой три раза в день, номер с кондиционером и всеми удобствами. Кайф! Если кто спросит, порекомендую ли я этот пансионат или нет - то отвечу, что для наших целей он подошел отлично, так что если вы ищете покоя и синего моря - то самое оно. Иногда выключался свет и вода в номере не текла (насос останавливался), потому что ломался генератор. Но это было пару раз всего за 10 дней.
Омрачили картину только эпизоды в дороге. В поезде в Анапу было очень жарко, не работал кондиционер, и наши места оказались в купе с аварийными неоткрывающимися окнами. Поэтому всю дорогу провели с мокрыми полотенцами, обтирались. А обратно мы ехали в вагоне с проводниками-студентами. Стажеры вроде бы. Об этом даже рассказывать не хочется. Хуже проводников я еще не видел. К тому-же обратно в Москву мы ехали через Украину, и у жены наковыряли проблемы с паспортом, так что мой кошелек несколько похудел. Таможенники просили денег не стесняясь.
Поэтому когда приехали на вокзал столицы, несмотря на холодрыгу (а мы то с югов, одеты легко) радовались, что добрались до дома и не остались бомжевать в Украине. Вот такая история.

2008-06-18

О конвертировании видео в mencoder

За то время, пока я обживаюсь в linux, в мои руки попадались некоторые портативные устройства, позволяющие смотреть видеофайлы. Для путешествующего каждый день утром и вечером в электричках - актуально. Был коммуникатор с QVGA экраном (320x240) и есть таблетка Nokia N810 (800x480). С каждым из них возникла одна и та же задача: из имеющегося видео сделать клип под экран устройства. Чтож, нет ничего невозможного. Для решения задачи имеем: Ubuntu linux, mencoder, умелые ручки.
Все довольно просто. Чтобы кодировать файл для просмотра с приемлемым качеством на портативном устройстве:
mencoder file_in.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=384:keyint=250 -vf scale=320:240 -o file_out.avi
Здесь вы меняете file_in.avi, file_out.avi, 320:240 на ваши параметры. Качество звука менять не люблю, поэтому "-oac copy" - копирую его как есть.
Для владельцев Nokia N810 - не пытайтесь сделать клип на полное разрешение экрана - видеопроцессор не потянет такую нагрузку. Видео высотой в 240 пикселей для просмотра в дороге - вполне достаточно, поверьте. Кроме того, используйте mplayer для этого устройства, и забудьте проблемы с субтитрами как страшный сон.
Так как лень двигатель прогресса, через некоторое время завелся скрипт
~/bin/mne
который несколько облегчает мне жизнь (если захотите использовать, не забудьте сделать его исполняемым).
Текст скрипта:

#!/bin/bash
if [ $3 ]; then A=`echo "-aid $3"`; else A=""; fi;

case "$2" in

nokia)
[ -d nokia ] || mkdir nokia
echo "ДЛЯ NOKIA N770/800/810 С СОХРАНЕНИЕМ СООТНОШЕНИЯ СТОРОН"
sleep 2
mencoder $1 -mc 0 -oac lavc -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:v4mv:vqscale=2:mpeg_quant -vf scale=-2:240 $A -o nokia/$1
#mencoder $1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=384:keyint=250 -vf scale=-2:240 $A -o nokia/$1

exit 0
;;

*x*)
[ -d scale ] || mkdir scale
echo "$2 БЕЗ СОХРАНЕНИЯ СООТНОШЕНИЯ СТОРОН ОРИГИНАЛА"
sleep 2
W=`echo $2 | awk -Fx '{print($1)}'`
H=`echo $2 | awk -Fx '{print($2)}'`
mencoder $1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=384:keyint=250:abitrate=128 -vf scale=$W:$H $A -o scale/$1
;;

*)
echo "======================================================================================================";
echo "Использование возможно с вариантами:"
echo "filename.avi nokia (для просмотра на Nokia N770/800/810 без тормозов)"
echo "filename.avi 320x240 (жестко по заданным параметрам, их можно изменить в таком-же формате)"
echo "После первого параметра можно добавить второй числовой, обозначающий номер звуковой дорожки, например"
echo "filename.avi nokia 1"
echo "для дублированных фильмов, содержащих оригинальный звук на 1 дорожке,"
echo "который вам нужен. Дорожки нумеруются с 0"
echo "======================================================================================================";
exit 1
;;
esac

2008-06-02

Софт для Nokia N810. Проблемы и радости.

Одной из первых вещей, о которых задумывается счастливый владелец Nokia N810, является программное обеспечение. Где взять? Как устанавливать? Какие плюсы и минусы? Постараюсь вкратце рассмотреть этот вопрос, однако так, чтобы читающий уразумел.
Во-первых, где взять. Человек, знакомый с Linux, особенно с современными дистрибутивами на основе Debian, такими как Ubuntu, обнаружит, что порядок установки через визуальное приложение очень напоминает аналогичный процесс на Большом Настольном Компьютере (БНК), а установка пакетов из консоли - так и вовсе один в один. Apt он и в Африке apt.
Я не претендую на звание самого-знающего-предмет-человека, а просто излагаю MyWay решения насущных вопросов. Поэтому, если кто ищет здесь полного структурного изложения со всеми ньюансами - то боюсь, разочаруется. А кому нужно просто знать, как сделать это уже проверенным путем - читать.

Для тех, у кого под рукой есть шустрый и бесплатный WiFi - никаких проблем. Заходим в Меню - > Параметры - > Диспетчер приложений. В меню Диспетчера приложений находим Инструменты - Каталог приложений. В открывшемся окне видим список репозитариев, откуда предположительно можно устанавливать приложения. Выбирайте один за другим пункты списка и нажимайте "Изменить" - убедитесь, что галочка "Отключен" снята.
Кроме того списка, что предлагает нам Nokia по умолчанию, доступно еще множество других репозитариев. Чтобы их установить, пройдите по ссылке. Там есть поиск по имени пакетов, и, поставив галочку напротив понравившегося репозитария и нажав кнопку "Install selected" - получаем файл, который при запуске на Nokia N810 добавит репозитарии в список "Диспетчера приложений". Внимательно прочитав то, что на том сайте написано, понимаем, что лучше отключить или удалить имеющийся список репозитариев, чтобы не дублировать строки списка.
Вернемся в Диспетчер приложений. При подключенном соединении с интернетом вновь в меню выбираем "Инструменты - > Обновить список приложений". Через некоторое время, когда процесс обновления завершиться, в "Диспетчере приложений" можно будет пользоваться кнопками "Приложения для установки" для поиска и установки и "Наличие обновлений". Ничего особенно хитрого. Самое сложное здесь - это найти неподалеку точку подключения. GPRS для этого дела конечно тоже годится, но меня жаба душит, к тому же медленно.
И тут нам на помощь приходит возможность Linux все настроить ручками. Я уже описывал способ соединения Nokia N810 с интернетом посредством USB-шнура, идущего в стандартной комплектации. Воспользуйтесь им, чтобы получить в руки инструмент apt, доступный через консоль. Использовать это соединение для установки программного обеспечения через визуальный инструмент "Диспетчер приложений" у меня не получилось, о чем я, впрочем, не сожалею. Диспетчер можно использовать для того, чтобы узнать, как называется требуемый пакет приложения.
Чем консольный способ установки лучше Диспетчера приложений (ДП)? Странно, однако возможности установить через ДП сразу несколько программ я не обнаружил. После каждой установки довольно долго происходит новый сбор информации о пакетах. И если включено много репозитариев, то времени этот процесс занимает довольно. В консоли же это не только возможно, но и удобно, например вот так:
apt-get install mplayer pidgin
Удаление программ осуществляется аналогично:
apt-get remove docreader evince canola2
Естественно, все это проделать можно только под root, для чего установите на аппарат пакет becomeroot и в консоли наберите
sudo gainroot
перед тем, как начать манипуляции с установками и обновлениями через консоль. Надеюсь, я вас убедил.
И еще кое-то о пакетах. Для обновления информации о наличии пакетов в репозитариях, как всегда сработает
apt-get update
Но вот у пользователей Linux сразу же начнут чесаться руки набрать
apt-get upgrade
чтобы обновить уже установленный софт. Имею сказать вам, дорогие мои, что я дважды пытался это проделать. И каждый раз устройство переставало загружаться, так что приходилось перепрошивать все заново. Поэтому пользуйтесь приложением для резервного копирования, и сохраняйте копию на внутреннюю карту памяти, с нее при прошивке данные не удаляются. После прошивки всегда можно будет восстановить все свои настройки. Пакеты правда придется устанавливать заново. О том, как прошить аппарат в интернете уже писали неоднократно, имеет ли смысл тут отписываться и мне? Вот здесь нашел статью человека, проделывающего upgrade без моих проблем, попробуйте сделать как он описал.
Да, кстати, после установок пакетов на Nokia N810 не забудьте
apt-get clear
для того, чтобы удалить установочные пакеты из памяти устройства.

2008-05-21

Nokia N810 и интернет через компьютер

Когда я выбирал и покупал Nokia N 810, руководствовался несколькими пожеланиями:
1) большой экран, на котором удобно смотреть видео и читать книги;
2) привычный Linux на борту (кстати основанный на Debian, а значит убунтологи там почти как дома). Удобные программы (включая любимую консоль) и ощущение свободы. На аппарат немедленно водворились Pidgin и Mplayer;
3) отсутствие телефонного модуля (предпочитаю небольшой телефон с bluetooth и GPRS носить отдельно).
Все это я получил, и был очень рад такому делу. Но, как и многие до меня, через денек стал задаваться вопросом: неужели устанавливать программы из репозитариев мне придется только через WiFi (бегая в поисках точки по городу) или GPRS (отстегивая денежки на телефон)? Ни то ни другое мне не нравится. Линукс приучил меня к бесплатности софта, а тут — такая засада! Нечестно!
Размышляя об этом, и поглядывая на прилагающийся в комплекте USB-шнур, подумал — наверняка есть способ организовать доступ в интернет через «Большой Настольный Компьютер». Перерыл полинтернета. Наткнулся на несколько советов и рекомендаций. Сталкиваясь с затруднениями и вопросами, копая глубже и экспериментируя я пришел к просветлению по поводу темы данной заметки. Чем и хотел бы с вами поделиться.
Итак, нам потребуется: аппарат Nokia N 810, USB-шнур из комплекта, БНК с Ubuntu, маленький бубен. Начинаем шаманить!

РАБОТАЕМ С NOKIA N 810
Для начала устанавливаем на устройство маленькую утилиту, позволяющую удобно становиться root. Называется она becomeroot. Кидаем deb-пакет на Nokia и запускаем. У меня установилось без проблем.
Далее находим в меню и запускаем консоль. В консоли пишем:
sudo gainroot
- и вуаля! - становимся суперпользователем.
Теперь нам потребуется поправить пару файлов в режиме root. Я покажу, как они выглядат у меня сейчас. Первое — это
vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto usb0
iface usb0 inet static
address 192.168.2.2
netmask 255.255.255.0
gateway 192.168.2.1
Что мы видим? Настроено сетевое подключение через USB, прописан IP, маска сети и шлюз. Шлюзом будет IP usb-соединения на БНК. До этого мы еще дойдем.
У кого-нибудь возникает вопрос: а почему 192.168.2.2 а не 0.2? А потому, дорогие мои, что в локальных и корпоративных сетях, с которыми я сталкивался, 192.168.0.0 и 1,0 часто используются.
Далее:
vi /etc/resolv.conf
nameserver 192.168.2.1
Опять же прописан IP usb-соединения на БНК.
Далее:
insmod /mnt/initfs/lib/modules/2.6.21-omap1/g_ether.ko
Здесь два момента. Первый — возможно, что вместо «2.6.21-omap1» у вас будет другая версия. Подкорректируйте строку. Второе — лично у меня вывод этой команды в перый раз показывает, что устройство занято и операция не выполнена. Зато во второй раз всегда срабатывает.
И наконец —
ifup usb0
Теперь, чтобы убедиться, что устройство готово, пингуемся:
ping 192.168.2.2
Если пинг проходит нормально — значит все сделано правильно. Теперь приступаем к БНК.

РАБОТАЕМ С БОЛЬШИМ НАСТОЛЬНЫМ КОМПЬЮТЕРОМ
vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
address 192.168.0.1
netmask 255.255.255.0

allow-hotplug usb0
mapping hotplug
script grep
map usb0

iface usb0 inet static
address 192.168.2.1
netmask 255.255.255.0
up echo 1 > /proc/sys/net/ipv4/ip_forward
up iptables —P FORWARD ACCEPT
up iptables —A POSTROUTING —t nat —j MASQUERADE —s 192.168.2.0/24
down echo 0 > /proc/sys/net/ipv4/ip_forward
down iptables —t nat —F POSTROUTING

Здесь нас касается код, начиная с «allow-hotplug usb0». Выше — это ваши сетевые настройки, и если у вас сеть работает хорошо, то, как в анекдоте «ничего не трогай ничего не меняй». Только добавить то, что касается usb0. Как видно, кроме настроек сетевого интерфейса по шнуру USB, здесь прописаны команды, открывающие для соединяющегося по USB устройства выход во внешний мир. Внесли изменения? Сохранили?
Теперь самое ответственное. Если у вас есть барабан или хотя бы бонго — то желательно сделать дробь. На крайний случай — можно использовать табуретку.
Nokia уже подготовлена и пинг прошел. Подключаем ее шнуром к БНК. Не торопитесь включать содениение usb0 на БНК. Сначала нужно убедиться что подключился нужный нам модуль. Для этого потребуется команда
lsmod | grep usbnet
Если модуль подключился — кричим «Аллилуйя». Потому что без него ничего не выйдет. Я не знаю, что там идет по умолчанию при установке Ubuntu. Когда устанавливал Ubuntu на БНК, моя нокия была подключена к нему через USB и постоянно пинговала его
ping 192.168.2.1
Возможно, что это включило модуль usbnet при установке, а может быть он и так есть. Не знаю. Можете написать в комментах, как с этим обстоит дело, буду рад поправиться.
Если «Аллилуйя» прозвучало — идем дальше. Теперь поднимаем соединение:
sudo ifup usb0
После этого с БНК «ping 192.168.2.2», а с нокии соответственно «ping 192.168.2.1» должны пройти. Если все ок — поздравляю, вы в сети.

И КОЕ ЧТО ЕЩЕ
Моя корпоративная сеть использует прокси сервер с авторизацией. Поэтому, чтобы получить доступ в интернет, в консоли на Nokia N 810 я дополнительно пишу:
export http_proxy=http://Имя:Пароль@имя_или_IP_прокси:порт_прокси
Дома же мой провайдер несколько иначе строит свою политику, поэтому предыдущая команда не поможет. Поможет другое: перед тем, как поднимать сетевое соединение на Nokia, мне нужно прописать DNS сервера провайдера:
vi /etc/resolv.conf
nameserver 192.168.2.1
nameserver IP_DNS1
nameserver IP_DNS2
Конечно я не прописываю заново все каждый раз, а просто комментирую
# то, что мне в данный момент не нужно
Умные парни давно написали скрипты, которые автоматизируют эти манипуляции. Они молодцы. А мне неохота.

И НАПОСЛЕДОК
Не ожидайте, что сможете лезть в браузер и идти на любимые странички. Возможно, после большого бубна и это рализуемо, но уж коли у вас под рукой БНК — можно ведь и на нем поработать, верно? Зачем же тогда такое соединение? Читай сначала — для реализации установки программ из репозитариев. Иначе говоря, в режиме root теперь можно сделать
apt-get update
apt-get install mplayer pidgin

Спасибо за внимание!