Научная поисковая система на вашем Linux-десктопе



10 коммент.
Некоторое время назад я писал о SWISH++, и вот теперь мне хотелось бы обобщить написанное в более краткой форме. Проблема поиска нужной статьи, если не помнишь точно где она находится в каталогах, действительно серьёзная.


1. Поиск дубликатов
Итак, когда я накачал нужных мне статей из Интернета, я прежде всего смотрю, есть ли они у меня в коллекции с помощью fdupes. Эта программа ищет дубликаты файлов:
$ fdupes -rd .
Точка в конце говорит о том, что искать дубликаты fdupes будет, начиная с текущего каталога, поэтому можно в каталоге со статьями сделать подкаталог 1/ и набросать туда скачанные статьи.

Fdupes сравнивает файлы как побайтово, так и с помощью подсчёта md5-суммы, работает невероятно быстро, сортировка производится в полуавтоматическом режиме: программа выводит в консоли дублирующиеся файлы и спрашивает, какой из них оставить. Об этом уже говорилось в статье о подходах к сортировке PDF-файлов.


2. Индексация текста в PDF-файлах
Сначала из
документов pdf вытаскиваем текст, для чего просим утилиту find найти все файлы PDF и для каждого найденного выполнить pdftotext без выдачи предупреждений и без вставки символов разрыва страницы:
find -name '*.pdf' -exec pdftotext -nopgbrk -q {} \;
Надо отметить, что pdftotext хорошо работает только для английского языка, на котором, в общем, все статьи и написаны.

Теперь индексируем все текстовые файлы - в этом нам поможет собрат SWISH++ по имени index++ для индексации текстовых файлов:
index++ -e "text:*.txt" .
Точка в конце означает, что поиск ведётся с текущего каталога. Подробнее об индексации и автоматизации этого процесса сказано здесь.

В результате в текущем каталоге появится файл swish++.index где, собственно, лежит информация об индексировани файлов. Теперь всё готово для поиска.


3. Ищем в архиве статей нужное
Для поиска используем search++ которая найдёт по нашему запросу в индексированной базе swish++.index файлы. Вот пример поиска статьи по математической морфологии, в которых нет упоминания про медицину:
$ search++ morphology and erosion and dilation not medicine
Мгновение спустя вижу результат (вывод сокращён):
# results: 125
99 ./Krylov2.txt 3771 Krylov2.txt
49 ./13300407.txt 3103 13300407.txt
46 ./morph1.slides.printing.6.txt 4369 morph1.slides.printing.6.txt
37 ./lecture_morphology_sara.txt 6746 lecture_morphology_sara.txt
30 ./SIGGRAPH2002_Sketch-Mitchell.txt 5308 SIGGRAPH2002_Sketch-Mitchell.txt
26 ./MorphologicalImageProcessing.txt 7642 MorphologicalImageProcessing.txt
25 ./phdsymp2002_ledda.txt 8298 phdsymp2002_ledda.txt
23 ./lab2_manual.txt 9313 lab2_manual.txt
23 ./Project 1.txt 9946 Project 1.txt
22 ./morphology.txt 11212 morphology.txt
22 ./edg/morphology.txt 11212 morphology.txt
22 ./slides-6-geometry.txt 11717 slides-6-geometry.txt
22 ./V1BFOGG8.txt 10797 V1BFOGG8.txt
18 ./71650638.txt 13978 71650638.txt
Первая колонка - релевантность, вторая - расположение файла относительно текущей директории, третья - размер файла, четвёртая - имя. Просто и понятно.

Теперь в консольке набираю kdpf
./Krylov2.pdf и смотрю нужную мне статью. И всё.

Ссылки
Собственно, документации о SWISH++ очень мало, так что в основном я решил собрать свои предыдущие записи в один пост:
- поиск и удаление дубликатов файлов с помощью fdupes;
- выделение текста из PDF-файлов и их индексация;
- поиск в индексированных файлах с помощью SWISH++
Читать далее

Чтение MAT-файлов MATLAB в nip2



3 коммент.
То, о чём так долго говорили красные, белые, зелёные, и даже голубые - свершилось. Теперь замечательный графический анализатор nip2 полностью поддерживает чтение MAT-файлов, в которых MATLAB записывает данные рабочего окружения с двойной точностью (double precision). И хотя в основной ветке этой возможности ещё нет, в SVN-репозитории оно уже появилось благодаря скромным усилиям автора этих строк и John Cupitt - одного из авторов nip2 и библиотеки VIPS.

На всякий случай: nip2 это графический анализатор изображений (это не привычный gimp или photoshop), который создавался специально для работы с огромными файлами и научных применений. Но он может быть полезен и простым пользователям: с его помощью легко открывать, просматривать, кадрировать огромные файлы. Или, например, склеить две фотографии в одну - как склеивают панорамы.


Для чего нужно открывать MAT-файлы в nip2
Упреждая возможные вопросы "а зачем нам проприетарный mat когда есть csv" отвечу: запись в открытый формат CSV в матлабе происходит несколько нетривиальным образом и можно записать только одну переменную. Более того, если забыть указать несколько важных параметров, можно сильно потерять в точности сохраняемых данных. И главное, что уже много результатов научных экспериментов сохранено в MAT-формате.

Периодически возникает необходимость быстро просмотреть эти данные (это изображения) в каком-нибудь просмотрщике без необходимости загружать MATLAB. Таковых просмотрщиков я не знаю - открыть MAT-файл может только GNU/Octave с помощью библиотеки matio. Так что эта возможность очень нужна и востребована.

Установка nip2 и VIPS

Хотя об установке nip2 я уже писал, тем не менее, повторюсь. Сначала нужно скачать отсюда из support-зоны самый свежак. Сначала собираем VIPS и устанавливаем пакет, потом собираем nip2 и тоже устанавливаем. Последние версии (vips7.18.XX) со старыми версиями Питона могут не собраться, так что для этого при сборке пользуем ключ --without-python и собираем.

Для себя и своих студентов я собрал пакеты под Debian Etch и архитектуру i386 (да-да, я в конкретном бронепоезде):
После этого добавляем программу в меню вашего оконного менеджера или запускаем прямо из графической консоли командой nip2.


Просмотр MAT-файлов MATLAB в nip2

Здесь всё довольно просто: в диалоге открытия явно указываем, что хотим просмотреть MATLAB's mat-files и далее открываем такой файл. Пример на скриншоте - легендарная Лена
(а кто такая Лена?)


А теперь примерчик посложнее - загружаем изображение усреднённых темновых шумов цифровой камеры и берём от них Фурье-преобразование (на том же скриншоте открыта в левом нижнем углу неудачная фотография от скоростной съёмки):


Так что наши данные теперь можно просмотреть без томительного ожидания, пока MATLAB откроет эти файлы. Кстати о данных в форматах CSV и MAT...


Данные в CSV и MAT-форматах: особенности записи MATLAB и просмотр nip2
Эту заметку я хотел сделать отдельным постом, но решил выложить здесь же. Появился тут вопрос: как сохраняет MATLAB данные с плавающей точкой в разных форматах. Для этого мы провели маленькое расследование...


Подготовка
Ответ состоит из нескольких частей. Да, Матлаб может сохранять данные в своём формате mat, и его может прочесть та же Octave (теперь и nip2 с использованием библиотеки matio). Для проверки сгенерируем матрицу

>> a = magic(5)

a =

17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

>> b =a./3

b =

5.6667 8.0000 0.3333 2.6667 5.0000
7.6667 1.6667 2.3333 4.6667 5.3333
1.3333 2.0000 4.3333 6.6667 7.3333
3.3333 4.0000 6.3333 7.0000 1.0000
3.6667 6.0000 8.3333 0.6667 3.0000

>> b(2,2)=1.09878432753084573248523475
>> b(2,3)=2^20

Видим только первые четыре числа после запятой - это потому, что по умолчанию MATLAB отображает числа в коротком формате. Изменить этот формат можно командой format type.

Чтобы сделать задачу более наглядной, в матрицу записали два числа: одно с разными числами после запятой, а второе - очень большое (2^20). Теперь сохраняем в MAT-файл и CSV командами:
save('magic5x5doubleafterformatlong.mat', 'b'); %% это сохраняется MAT-файл
csvwrite('magic5x5double-afterformatlong.csv',b); %% это сохраняется CSV-файл

Теперь открываем их и сравниваем с исходниками...

Данные в MAT-файле.
В MAT-файлах всё чисто: он сохраняет так же, как и открывает.
>> load('magic5x5doubleafterformatlong.mat')
>> b
b =
1.0e+06 *
Columns 1 through 4
0.00000566666667 0.00000800000000 0.00000033333333 0.00000266666667
0.00000766666667 0.00000109878433 1.04857600000000 0.00000466666667
0.00000133333333 0.00000200000000 0.00000433333333 0.00000666666667
0.00000333333333 0.00000400000000 0.00000633333333 0.00000700000000
0.00000366666667 0.00000600000000 0.00000833333333 0.00000066666667
Column 5
0.00000500000000
0.00000533333333
0.00000733333333
0.00000100000000
0.00000300000000
>> b(2,2)
ans =
1.09878432753085
>> b(2,3)
ans =
1048576

Данные в CSV-файле.
А вот тут начинаются приключения. MATLAB записывает в CSV формат данные с точностью, такой же, как при отображении. То есть, например, при отображении используется вывод только первых 4 чисел после запятой - следовательно, сохранены они в CSV будут так же.

>> b(2,2)

ans =

1.0988

С большими числами тоже самое: они сохраняются в экспоненциальной форме с точностью, установленной для отображения (по умолчанию 4 знака). Это так же видно в CSV-файле (записывает с той точностью, с которой отображает). У одной и той же матрицы, сохранённой в CSV и MAT сходный размер.


>> b(2,3)=2^20

b =

1.0e+06 *

0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 1.0486 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000

>> b(2,3)

ans =

1048600

>> 2^20

ans =

1048576

Именно так оно и происходит по умолчанию: MATLAB просто округляет числа при записи в CSV до четырёх значащих чисел. Для того, чтобы запись происходила с нужной нам точностью в CSV, следует использовать команду dlmwrite и явно указывать точность. Например так:

>> dlmwrite('magic5x5double1-dlmwrite-precision12f.csv', b, 'precision', '%12.12f')

Это записывает матрицу в CSV формат с переменной b и обеспечивает точность 12 значащих чисел. Так что стоит аккуратнее обходиться с командами записи: csvwrite вам запишет, конечно, переменную, но с малой точностью. Это может стать источником трудноуловимых проблем.


Отображение данных в MAT и CSV форматах в nip2
Теперь, возвращаясь к теме поста, в последних версиях (nip2 и vips > 7.18.2) замечательного графического анализатора nip2 можно просматривать не только данные в CSV, но и в MAT-файлах. Это очень и очень удобная возможность: например, усреднённое изображение в MAT-файле можно проанализировать и посмотреть без необходимости загружать лишний раз MATLAB. Особенно это актуально, если изображение в MAT-файле больших размеров. Точность просмотра CSV и MAT-данных составляет 5 значащих цифр.
Читать далее

MOCP - Music On Console player, или Играй, гармонь!



20 коммент.
Время от времени нужно выходить в консоль и гасить иксы - для изменения иксовых же настроек или обновлений, связанных с иксовыми пакетами. И сидеть в это время в тишине совсем не хочется. Конечно, можно запустить XMMS на ноутбуке и проигрывать музыку оттуда, но есть решение лучше: MOCP. Запустил MOCP в консольке, скрыл - и музыка заиграла. Вышел из иксов что-то поправить в консоли - а гармонь-то поёт :-)

Если б гармошка умела
всё говорить, не тая...
(с) Песня, из которой слов не выкинуть

Об этом замечательном плеере уже писал Андрей aka vonderer здесь. Из той песни тоже слов не выкинуть, но я немного подробнее остановлюсь на управлении плеером. Как любое хорошее приложение, оно управляется горячими клавишами, и основные клавиатурные сокращения такие:
  • ENTER – переключиться в директорию и\или начать воспроизведение песни
  • o – проиграть URL (например, интернет-радиостанции)
  • p или пробел – пауза
  • s – стоп
  • l – переключиться между одно- и двухпанельным режимом
  • a – добавить текущий файл в список воспроизведения
  • A – добавить текущую директорию в список воспроизведения
  • C – очистить список воспроизведения
  • q – отключить консольный интерфейс (сервер MOC будет продолжать воспроизведение, к нему можно подключиться снова, набрав mocp)
  • Q – отключение MOC-сервера (прекращение воспроизведения)

Так же можно воспользоваться более широкими возможностями по управлению плеером с помощью следующих клавиатурных сокращений:
  • n -- проиграть следующую песню из списка
  • b -- проиграть предыдущую песню из списка
  • S -- воспроизведение в произвольном порядке
  • R -- повторяет выбранную песню циклически
  • u -- перемещает элемент списка воспроизведения вверх
  • j -- перемещает элемент списка воспроизведения вниз
  • g или / -- ищет заданную строку в именах фалов песен
  • r -- перечитать директорию заново
  • f -- переключить режим отображения с имён файлов на теги
  • TAB -- переключение между списком воспроизведения и файлами песен
  • H -- показывает скрытые файлы
  • Ctrl-t -- показать или убрать длительность песни в списке
  • Ctrl-f -- показать или убрать формат песни
  • U -- переместиться на уровень выше в директории
  • a -- добавить файл к списку воспроизведения
  • A -- добавить каталог к списку воспроизведения
  • C -- очистить список воспроизведения
  • V -- сохранить список воспроизведения
  • d -- удалить отмеченные песни из списка воспроизведения

Наконец, управление громкостью
  • < -- уменьшить громкость на 1%
  • , -- уменьшить громкость на 5%
  • >— увеличить громкость на 1%
  • . — увеличить громкость на 5%
Если вы запамятовали какую-нибудь команду, то получить справку по клавиатурным сокращениям можно клавишей "?"

Язык осин и берёз MOCP по умолчанию отображает славяно-греко-латинской мешаниной, что легко поправить. Для этого копируем пример конфига отсюда:
$ cp /usr/share/doc/moc/examples/config.example.gz ~/.moc/
$ cd ~/.moc
# chown $USER config.example.gz
Где $USER - имя пользователя в системе. После этого разархивируем конфиг:
$ gunzip config.example.gz
$ mv config.example config
И правим его своим любимым текстовым редактором. Чтобы заставить MOCP дружить с кириллицей в ID3v1-заголовках, необходимо найти строку:

#ID3v1TagsEncoding = WINDOWS-1250

и превратить ее в

ID3v1TagsEncoding = WINDOWS-1251
И всё, играй, гармонь!
Читать далее

Как обналичить чек Google Adsense в Москве



15 коммент.
Некоторое время назад на блоге появилась контекстная реклама Google AdSense, чтобы несколько поддержать моё материальное благосостояние. И вот я получил свой долгожданный чек на целых сто восемнадцать долларов. Казалось бы - что такого, всего лишь обналичить чек? Но вот тут-то история и начинается...

Пусть этот пост немного не в тему блога, просто мало ли кому пригодится (или я снова буду обналичивать чек от AdSense). Итак, мы имеем чек Google AdSense, который выпустил Citibank в США. Такие чеки выглядят так:



Всего делов - обналичить чек. Для этого мы обзваниваем окрестные банки и говорим, как совершенно правильно советуют старшие товарищи, что нужно СДАТЬ ИМЕННОЙ ЧЕК НА ИНКАССО.

Услуга это не массовая, и скорее всего придётся ехать в центральное (головное) отделение банка. Операция проводится довольно долго (у меня заняло около 40 минут вместе с открытием счёта), так что запасаемся терпением. Ниже - итоги моих странствий со счастливым концом :-)

Краткий обзор пунктов приёма именных чеков Google AdSense на инкассо в Москве

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

Итак, чеки Google AdSense соглашается брать:

  • РБР, Русский банк развития (ФК Открытие): комиссия 1% от суммы (минимум 5$) + 900 руб (!) на почтовые расходы + комиссии сторонних банков. Время - не более 1 месяца. Только в головном отделении. Требуется открытие счёта.
  • Банк Москвы: комиссия 350 рублей, вроде (?) счёт открывать не обязательно, сроков назвать не могут.
  • Юниаструм банк: комиссия 500 рублей (= 21$), открытие счёта, головное отделение. Время 1-2 месяца.

В Райффайзен Банк, Альфа-банк и БинБанк можно не звонить и не тратить время - чеков не берут.


Теперь личные впечатления.

Несмотря на то, что в РБР у меня открыт счёт, комиссия у них просто грабительская: 1% от суммы и 900 рублей на почту + комиссия сторонних банков. Я, конечно, понимаю здоровое желание банков подзаработать, но всё имеет свои пределы.

Банк Москвы так же порадовал: по телефону бодро пообещали, что обналичить могут в любом офисе, но я, зная цену таким обещаниям, поехал в головное отделение. Дальше начинался цирк с конями: в головном офисе обналичка чеков только до 18:00 (хотя отделение работает до 20:00) и срока обналички назвать не могут (!). Такой восхитительный бардак, впрочем, неудивителен, судя по отзывам клиентов о самом банке.

Решив, что нервы дороже, поехал в Юниаструм банк. Путь неблизкий, но он того стоил. Персонал очень вежливый и приветливый, клиентов немного, на всю операцию (открытие счёта, приём чека на инкассо, оплата комиссии) ушло около 40 минут. В итоге: открыт валютный счёт, но без карты (комиссия не берётся, как и деньги за обслуживание), через 45 дней деньги можно забрать по паспорту в любом отделении Юниаструмбанка.

Не так давно (конец августа 2009) я зашёл в местный доп.офис Юниаструма и, после некоторых объяснений, забрал свои кровные 110$ американских рублей. Правда, с меня взяли комиссию в 1.5% "за безналичный перевод" - это составило около полутора долларов. На всё ушло около 40 дней, как и было обещано банкирами.
Читать далее

Закачка карт в GPS навигатор Garmin GPSMap 60CSx



15 коммент.
Не так давно решил разориться на GPS-навигатор, так как по многим местам приходится мотаться и ходить по отечественным картам уже нет никакой возможности. Вспомнив о том, как ув.тов. jetxee нахваливал Garmin GPSMap 60CSx, решил его прикупить. Естественно, сразу встал вопрос о том, как закачивать в него карты.


Выглядит он как достаточно крупных габаритов мобильник (середины 90-х, если кто помнит). Покупал на ebay, так как платить две цены здесь желания особого нет. Отсюда есть одна особенность: навигатор с английским меню, так что русские карты должны быть в транслитерации.

Итак, вариантов закачки карт в GPS-навигатор, собственно, два: через эмуляцию /dev/ttyUSB0 по закрытому протоколу Garmin и по Mass Storage.

Закачка карт в GPS-навигатор по протоколу Garmin
Этот вариант оказался самым жизнеспособным. Если ваше ядро собрано с поддержкой garmin_gps, то после подключения навигатора к USB штепселю ядро нам должно написать в логах dmesg так:
usb 4-1: new full speed USB device using uhci_hcd and address 3
usb 4-1: configuration #1 chosen from 1 choice
drivers/usb/serial/usb-serial.c: USB Serial support registered for Garmin GPS usb/tty
garmin_gps 4-1:1.0: Garmin GPS usb/tty converter detected
usb 4-1: Garmin GPS usb/tty converter now attached to ttyUSB0
usbcore: registered new interface driver garmin_gps
drivers/usb/serial/garmin_gps.c: garmin gps driver v0.28
Выделенная строчка нам говорит о том, что у нас появился новый порт имени /dev/ttyUSB0 куда мы будем закачивать наши карты.

Где взять карты для GPS-навигаторов Garmin?
Это философский вопрос, и в одном посте на него не ответить. Но для начала можно воспользоваться открытыми картами OpenStreetMaps (после регистрации имеем возможность экспортировать нужные вам куски карт в XML формат).

Уже собранные карты для Garmin, на всякий случай, есть здесь. После распаковки будет много файлов, нам нужен только 008XXX.img


Программы для закачки карт в GPS-навигаторы для Linux
Софта под Linux для закачки gps-карт в навигатор немного. Из опробованного мной могу сказать про sendmap. Скажу сразу: версия sendmap17Lstatic, которая Stable version of sendmap with RS support only, не работает у меня никак. При попытке отправить в навигатор карту ругается:

./sendmap17Lstatic /dev/ttyUSB0 -s57600 moscowregion.img
GPS SendMap & GetMap version 17, Kozicki@gps.chrisb.org

Checking input files
Preparing...
Failure to communicate with GPS or no maps can be upload into GPS
Зато работает новая версия, которая на сайте обозначена как Free sendMap20 rev 4.2 BETA for Linux with experimental USB support. С её-то помощью и удалось закачать карту, сделанную для московской области:
./sendmap20 -t/dev/ttyUSB0 -s9600 moscowregion.img
Detected : GPSMap60CSX Software Version 3.60
Available memory : 120 MB
Max number of maps: 2025
Final map size : 486 kB
Maps uploaded!
После этого карта появляется в списке карт навигатора (на всякий случай - у Garmin в устойстве карта может быть только одна, загрузка новой стирает предыдущую).

Параметры можно менять, например, изменить скорость закачки (-s115200) и присвоить карте другое отображаемое имя (-mMOSCOW )
./sendmap20 -t/dev/ttyUSB0 -mMOSCOW -s115200 63240001.img
После этого навигатор карту видит и может с ней работать. Правда, на той карте географическая привязка была какая-то странная...
Для Windows программы для закачки карт в GPS-навигатор называются MapSource и GPSMapEdit.

Закачка карт в GPS-навигатор через Mass Storage

Если выбрать в меню навигатора этот вариант, он станет большой флешкой и вы сможете на него закачивать карты:
usb 4-1: new full speed USB device using uhci_hcd and address 4
usb 4-1: configuration #1 chosen from 1 choice
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 4
usb-storage: waiting for device to settle before scanning
scsi 0:0:0:0: Direct-Access Garmin 60x microSD 1.00 PQ: 0 ANSI: 5
sd 0:0:0:0: [sda] 246016 512-byte hardware sectors (126 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] 246016 512-byte hardware sectors (126 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
sd 0:0:0:0: [sda] Assuming drive cache: write through
sda: sda1
sd 0:0:0:0: [sda] Attached SCSI removable disk
sd 0:0:0:0: Attached scsi generic sg0 type 0
usb-storage: device scan complete
По идее, монтируем /dev/sda1 и наступает нам счастье. После этого, по идее, нужно создать каталог garmin и закачать туда вашу карту с названием gmapsupp.img

Но здесь есть нюанс: если вы это делаете в первый раз, закачать карты можно, но навигатор карт не видит. Это связано, как я понял, с регистром символов: каталог должен называться Garmin - так, как его создаёт программа sendmap при первой заливке карт.

И ещё. Как выяснилось на форумах, закачать на флешку несколько карт и выбирать из них в Garmin 60 CSx не получится. С флешки видно только одну карту.
Читать далее

Подключение внешнего монитора к ноутбуку с помощью xrandr в Linux



16 коммент.
На каждом уважающем себя ноутбуке или нетбуке есть разъём для подключения внешнего монитора - для презентаций с проектора вещь необходимая. В Linux подключение внешнего монитора к ноутбуку с приходом Xrandr 1.2 и выше проблем не составляет, но на всякий случай выложу небольшое описание с примерами использования xrandr для работы с внешним монитором на ноутбуке.


Подключаем внешний монитор к ноутбуку с помощью xrandr

Не так давно я прикупил замечательный нетбук Toshiba NB-100, и сразу же потребовалось провести с него презентацию. Всё довольно просто - подключаем внешний монитор или проектор и пишем в консольке:
xrandr
На это нам xrandr ответит примерно так (цветовая раскраска - моя):
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1280 x 1280
VGA connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1280x800 60.0
1280x768 60.0
1024x768 60.0*
800x600 60.3
640x480 59.9
LVDS connected 1024x600+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x600 60.0*+
800x600 85.1 72.2 75.0 60.3 56.2
640x480 85.0 72.8 75.0 59.9
720x400 85.0
640x400 85.1
640x350 85.1
TV disconnected (normal left inverted right x axis y axis)
Так, что всё это значит? А значит это вот что:
  • VGA - наш внешний монитор или проектор, 1024х768- это разрешение, установленное на устройстве сейчас, 60.0 - частота кадров.
  • LVDS - собственно экран ноутбука, на котором сейчас стоит разрешение 1024х600 (так как он широкоформатный), 60.0 - частота кадров.
  • TV disconnected - ТВ-выход отключён (так как его попросту в этом нетбуке нет).
И сейчас лёгким и непринуждённым движением мы быстренько поставим на проекторе то разрешение, которое нам нужно.


Режим Clone mode

Это значит, что на внешнем мониторе \ проекторе будет отображено ТО ЖЕ САМОЕ, что и на экране ноутбука. Чтобы сделать Clone mode на новый монитор делаем так:
xrandr --output VGA --mode 1024x768 --output LVDS --mode 1024x600
Если разрешение внешнего монитора 800х600, то нужно поправить команду так:
xrandr --output VGA --mode 800x600 --pos 800x0 --output LVDS --mode 1024x600 --pos 0x0
Это всё позволит отдублировать изображение с экрана ноутбука на внешний монитор или проектор. А как быть, если нужно показывать два разных изображения?

Здесь имеет место быть маленькое лирическое отступление. Если xrandr отказывается выставлять высокое разрешение на внешнем мониторе, это может быть связано с объёмом видеопамяти. Для того, чтобы решить проблему, нужно иксам указать на использование "большого виртуального экрана". Делается это правкой файла /etc/X11/xorg.conf где в секции Section "Screen" добавляем:
Section "Screen"
Identifier "Default Screen"
Device "Generic Video Card"
Monitor "Generic Monitor"

SubSection "Display"
Virtual 2048 1024
EndSubSection

EndSection
Здесь указывается разрешение общего виртуального экрана в формате ШИРИНАхВЫСОТА (в данном случае 2048 на 1024). Именно такой вычтя из этого физическое разрешение вашего монитора, вы получите максимальное разрешение внешнего монитора ноутбука, которое можно установить с помощью xrandr.

Режим
Dual Monitor mode
При таком режиме вывод на проектор будет отличаться от вывода на монитор ноутбука: то есть вы сможете перетаскивать окна на внешний монитор, а на ноутбучном мониторе их не будет. Это очень удобно, когда вам нужно показать вывод, скажем, латеховского документа и не пугать благородных донов видом латеховского кода.

Сделать это можно с помощью правки xorg.conf, как уже говорилось, или с помощью xrandr. Чтобы сделать DualHead на внешний монитор с разрешением 1024х768 пишем
xrandr --output LVDS --mode 1024x600 --pos 0x0 --output VGA --mode 1024x768 --right-of LVDS --pos 1024x0
В этом случае ведущим будет внешний монитор (это определяется параметром --pos). То есть где 0 тот и главный монитор (на нём будут менюшки открываться). А вот так:
xrandr --output VGA --mode 1024x768 --pos 1024x0 --output LVDS --mode 1024x600 --pos 0x0
Ведущей будет панель ноутбука.

Горшочек не вари
Чтобы отключить всю эту светомузыку с внешним монитором, нужно дать команду:
xrandr --output VGA --off
после чего всё вернётся на место, внешний штепсель будет выключен и проектор отключится от вашего ноутбука.

Как повернуть экран в Linux с помощью Xrandr
Повернуть изображение на ноутбуке (в частности, удобно на нетбуке, когда хочешь почитать книжку) с помощью xrandr очень просто:

xrandr -o left

Чтобы повернуть по часовой стрелке изображение на мониторе пишем:

xrandr -o right


Чтобы вернуть всё на место, достаточно дать команду:

xrandr -o normal

И всё вернётся на свои места.

Графические утилиты для xrandr
Для того, чтобы иметь возможность всё делать через графические утилиты, есть утилита grandr. Выглядит она не просто, а очень просто:
Собственно, она является простой обёрткой для консольной утилиты xrandr и позволяет управлять подключением внешних мониторов (вращение, размещение и прочее) без необходимости что-то набирать в консоли. Аналогичная оболочка для xrandr в KDE называется krandr.


Ссылки

Весьма полезно будет ознакомиться с трудами арчеводов, линсоветчиков и общими идеями по xrandr.
Читать далее

Живой Linux своими руками, Эпизод 3: Тюнинг системы



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


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

Что можно удалить из базового дистрибутива
Пример с дистрибутивным ядром показателен - его снос высвобождает целых 60Мб. Но есть куча других мелких и не очень утилит, которые не нужны в таком объёме, особенно в бездонной директории /usr. Итак:
  • снос дистрибутивного ядра и замена "живым"
  • aptitude purge python2.4
  • удаление утилит тестирования типа reportbug, installation-report и прочих
  • вырубка всяких альтернативных утилит типа dc, nano, tcsh, portmap
  • прополка от python-selinux, policycoreutils и прочих параноидальных прибамбасов
  • долой info, bind9, whois, finger, telnet....
  • убирать документацию разработчиков из /usr/share/doc и словарей из /usr/share/dict - это не столько сокращает объём сколько уменьшает количество файлов (где-то на 10 тысяч)
  • локали (/usr/share/i18n/locales), мануалы (/usr/share/man) и шрифты оставить только нужные и на тех языках, о которых вы слышали. Локали можно убрать с помощью localepurge.
В общем, следует пройтись с топором по директориям, особенно сильно им размахивая в /usr, где добра больше всего. Всё это поможет сэкономить место для чего-нибудь действительно полезного. Например, для иксов :-)
У меня в итоге получилось, что базовый ISO-образ вместе с иксами, MC и IceWM занимает чуть больше 100Мб. В ходе тестирования в эмуляторе выяснилось, что загружается сие чудо в системах с более чем 64Мб ОЗУ. На ноутбуке загрузилось примерно за минуту, нашло все устройства и даже примонтировало автоматом все диски.


Что стоит установить в базовую систему
Всё сказанное ниже будет сильно зависеть от того, что вы хотите сделать из системы. Но я думаю, совсем не лишним и не обременительным будет установить:
  • облегчённые утилиты для интернет: wget и elinks
  • утилиты тестирования оборудования: dmidecode, lshw, hdparm, memtest86+, bonnie++
  • samba для общения с оффтопичной системой
Это сформирует базовую систему, которую лучше всего скопировать куда-нибудь и сжать в архив. При необходимости её легко дополнять и обвешивать программами под текущие нужды - а дальше можно печь живые диски, как горячие пирожки, при помощи live-скриптов.


Настройки, о которых легко забыть
Их не так много, но их отсутствие приводит к досадным разочарованиям. Поэтому ниже - небольшой список того, что следует сделать в системе перед запаковыванием её в ISO-образ и на флешку.

Автоматический логин
Чтобы каждый раз не писать пароль, лучше всего настроить автоматический вход в систему. Если диск спасательный, то можно сделать так: удалить пакет xdm и поставить mingetty - так обеспечивается вход в систему пользователя без пароля и запуск иксов, когда они нужны.
Итак:
aptitude remove xdm
aptitude install mingetty


После этого заходим в /etc/inittab меняем строку вида
1:2345:respawn:/sbin/getty 38400 tty1
на
1:2345:respawn:/sbin/mingetty --autologin имяпользователя tty1
Заменяя имяпользователя на логин реального юзера, имеем беспарольный вход в систему (взято отсюда). Потом, если потребуются иксы, пишем startx и наслаждаемся.


Настройка иксов

Если вы хотите, чтобы иксы (если они есть, конечно) запускались всегда и везде, нужно прописать драйвер vesa:
Section "Device"
Identifier "Cirrus Logic GD 5446"

Driver "vesa"
BusID "PCI:0:2:0"
EndSection

И не забыть про кириллицу

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc104"
Option "XkbLayout" "us,ru(winkeys)"
Option "XkbOptions" "grp:alt_shift_toggle"

EndSection
Если вы эстет, то можно ещё долго изгаляться со шрифтами и прочими рюшечками. Мне и обычных шрифтов хватает - лишь бы там были русские буквы и читалось без особого напряга.

Так же не стоит забывать про разрешение экрана - указывайте все при конфигурации иксов:
dpkg-reconfigure xserver-xorg
Повыключайте разного рода ускоряющие драйверы типа glx и dri, если вы создаёте спасательный диск. В общем, тюнинг системы - дело увлекательное...
Читать далее