понедельник, 7 июня 2010 г.

Слушаем музыку из Vkontakte через Амарок

Дело было вечером, делать было нечего… Дернуло меня поглядеть на Qtscript, на котором пишутся плагины для Амарока, ну, думаю, просто смотреть неинтересно — надо чего-то написать. Ну, а так как я в это время слушал музыку именно из Контакта, так как не для кого не секрет, что там можно найти практически все, то было решено заменить совсем неудобный плеер контакта на Амарок, дабы была возможность нормально этим делом управлять посредством мультимедийныйх клавиш и да и просто для объединения в один плейлист композиций локальных и сетевых.

А вышел плагин, который представляю сообществу. Сразу скажу — предложения и рекомендации не принимаю, ибо все делалось за 1 вечер и в личных целях — ознакомится с возможностями Qtscript и API Вконтакте. Если кто-то доработает или переделает — буду только рад. Дополнение позволяет искать нужные композиции на просторах данной соцсети, добавлять их в плейлист Амарока, а также сохранять в локальную коллекцию.

Вот так это выглядит:

А это сам поиск:


Установка проста: В амароке — сервис-управление сценариями-установить сценарий, и выбираем наш архив. Перезапускаем плеер и наслаждаемся удобным поиском=)
Спасибо за внимание. Надеюсь, кому-то пригодится.

Скачать скрипт можно по ссылке (Dropbox): сократил ввиду того, что хабр режет слово script в ссылке, Тыц
Для страдающий паранойей: https://dl.dropbox.com/u/723557/vk_search.amarokscript.tar.gz

UPD: Если кому интересно, то есть еще вариант скрипта для того, чтобы слушать музыку друзей и свою собственную. Могу выложить, но там есть некоторые нюансы с установкой (для фанатов=))…

вот так оно смотрится:

UPD2: Залил на kde-apps.org
ссылка vk_search
Источник

Музыка из Vkontakte в Exaile

Хочу рассказать о плагине для Exaile, позволяющем слушать музыку из vkontakte.ru



Возможности плагина:
— собственно поиск по аудиозаписям
— удаление дубликатов
— работа плагина без регистрации на сайте
— множественное добавление записей в плейлист
— сохранение выбранных записей на локальный диск в формате artist — track.mp3 (в домашнюю директорию)
UPD — выбор директории для сохранения треков в настройках плагина (если указанной директории не существует — она создается)
UPD — загрузка плейлиста пользователя по его ID

Полученные бонусы от Exaile:
— подтягивание обложки диска
— перемотка трека, не ожидая его полной закачки
— сохранение/импорт плейлиста
— поддержка last.fm и многое другое...

Установка:

Правка — Параметры — Вкладка Plugins — Install plugin file — выбираем vk_plugin.exz, после чего в списке плагинов напротив vk_exaile ставим галку:


Страница плагина на github
Спасибо realbc за тестирование!

+ добавил поиск по ID пользователя (версия 0.0.2)

Буду очень рад, если кому пригодится, писалось для себя, с целью изучения Python и Vkontakte API.

Источник

суббота, 5 июня 2010 г.

Плагин для rhythmbox и vkontakte.ru

Появился плагин для rhythmbox'а, который позволяет прослушивать вашу музыку из vkontakte.ru.
Всё просто. Выполняем в консоли следующие команды:
sudo apt-get install bzr
mkdir ~/.gnome2/rhythmbox/plugins/
cd ~/.gnome2/rhythmbox/plugins/
bzr branch lp:rhythmbox-plugin-vkontakte
ln -s rhythmbox-plugin-vkontakte vkontakte

И теперь, запустив Rhythmbox, вы можете наслаждаться любимой музыкой со своей странички vkontakte.ru.
Сам проект находится здесь.

IT-Mix_v0.0.4

-BolgenOS
-Отказ Google от M$
-Немного об играх.
-Немного о прочем.
Подкаст

вторник, 1 июня 2010 г.

Грабли

Юзеp - человек, наступающий на гpабли.
Чайник - начинающий юзеp, ни pазу не наступавший на гpабли и потому увеpенный, что гpаблей не существует.
Ламеp - юзеp, pегуляpно наступающий на гpабли, но по-пpежнему увеpенный что гpаблей не существует.
Узкий специалист - юзеp, в совеpшенстве владеющий наступанием на одни и те же гpабли.
Шиpокий специалист - юзеp, имеющий на лбу более двух шишек.
Пpогpаммеp - тот, для кого в наступании на гpабли важнее всего pезультат. Устав наступать на чужие гpабли, изготавливает свои собственные.
Пpодвинутый пpогpаммеp - пpогpаммеp, наступающий на каждые гpабли не более двух pаз.
Копиpайт - концепция, огpаничивающая количество доступных для наступания гpаблей финансовыми возможностями юзеpа.
Геймеp - тот, для кого в наступании на гpабли важнее всего пpоцесс. Обычно не способен изготовить собственные гpабли.
Читеp - pазновидность геймеpа; наступает только на гpабли с поpолоновыми насадками на pучке и обычно не больше одного pаза.
Хакеp - тот, кто способен наступить на гpабли, даже если они спpятаны в саpай и запеpты на замок.
Хакеp-идеалист - благоpодный боpец за пpаво каждого наступать на неогpаниченное количество гpаблей.
Microsoft - коpпоpация, всемиpный лидеp по пpоизводству гpаблей
Билл Гейтс - мифическое существо из пpогpаммеpского фольклоpа; злой дух - покpовитель гpаблей.
Апгpейд - пpоцесс пеpманентной тpаты денег на покупку все новых гpаблей, каждые из котоpых бьют больнее пpедыдущих.
Бета-веpсия - веpсия, в котоpой гpабли видны невооpуженным глазом.
Релиз - веpсия, в котоpой гpабли пpисыпаны листьями.
Совместимость веpсий - пpинцип, позволяющий новым гpаблям попадать точно по шишке от пpедыдущих.
Ассемблеp - язык пpогpаммиpования, позволяющий наступать на гpабли несколько миллионов pаз в секунду.
Локальная сеть - технология, позволяющая получить по лбу, даже когда на гpабли наступает кто-то дpугой.
Интеpнет - технология, позволяющая наступить на гpабли, находящиеся на дpугой стоpоне земного шаpа.
Сетевая конфеpенция - технология, позволяющая каждому наступить не только на свои, но и на чужие гpабли.
Русские кодиpовки - подаpочный набоp гpаблей для пользователей интеpнета.
Дpужественный интеpфейс - pезиновая накладка на pучку гpаблей.
Гибкий (настpаиваемый) интеpфейс - накладка на pучку гpаблей, котоpую можно двигать, подгоняя под высоту своего лба.
Гpафический интеpфейс - гpабли, позволяющие pегулиpовать цвет и интенсивность искp после удаpа по лбу.
Hенадежная система - гpабли, котоpые бьют вас даже тогда когда вы на них не наступаете.
Hадежная система - гpабли, котоpые бьют вас по лбу, даже когда вы стоите к ним спиной.
Многозадачность - концепция, позволяющая наступать на несколько гpаблей одновpеменно.
Объектно-оpиентиpованное пpогpаммиpование - метод изготовления гpаблей по пpинципу матpешки.
Мануал - книга, описывающая pазличные способы наступания на гpабли. Hикогда не используется ламеpами и хакеpами. Пpодвинутые пpогpаммеpы используют ее после того, как наступят на те же гpабли во втоpой pаз.
Техподдеpжка - служба, дающая советы, что делать после наступания на гpабли. Обычно пеpвый ее совет - наступить на гpабли еще pаз и сpавнить ощущения.

Grub 2 (part 3)

востановление GRUB2 с LiveCD. способ 3 (совсем простой)
в случае, если нужно только восстановить MBR диска (например, после (пере)установки Windows), все можно сделать еще проще, вообще ничего не монтируя.
все так же грузимся с liveCD. определить, какой нужен жесткий диск можно опять же с помощью "sudo fdisk -l". если он один - значит, sda.
и вот, собственно, команда на "мат в один ход":
Код:
sudo grub-install --root-directory=/tmp /dev/sda
измените /dev/sda на нужный диск. все! можно снова грузиться с этого диска

создание LiveCD с GRUB2
в случае, если ваш компьютер не поддреживает загрузку с usb, можно создать cd-диск с grub2, через который можно будет загрузить свою систему при неисправности основного grub2.
для начала создадим в удобном месте папку, в которой будем собирать наш диск, а в ней вложенные папки "/boot" и "/boot/grub":
Код:
mkdir -p tmp/iso/boot/grub
теперь сразу же определимся с оформлением. если вам нужно простое черно-белое загрузочное меню - следующее действие можно пропустить. если же вы хотите получить менюшку с настраиваемым разрешением, более гибкой настройкой цветов и даже по желанию фоновым изображением - нам нужно будет добавить на диск шрифт, который используется для отображения графического меню. скопируем его:
Код:
cp /usr/share/grub/unicode.pf2 tmp/iso/boot/grub
теперь нам нужно написать файл конфигурации "grub.cfg", содержащий загрузочное меню и настройки. вы можете взять за основу ваш "/boot/grub/grub.cfg" и изменить его под текущие нужды, а можете написать его с нуля - оба варианта подходят если вы понимаете структуру "grub.cfg". в противном случае вы можете взять готовый шаблон, помещенный в конце этого раздела и отредактировать его.
для тех же, кто избрал "путь самурая" - подробнее о создании собственного "grub.cfg" вы можете почитать выше, в разделе "создание дополнительных меню загрузки". здесь же опишу лишь некоторые специфичные для LiveCD вещи.
если вы берете за основу "/boot/grub/grub.cfg" - уберите из него строки, задающие ваш рут-раздел системы в качестве root ("search.... uuid_раздела...."). корневым разделом должен быть cd-диск!
если вы выбрали вариант с графическим меню - нужно обязательно подгрузить скопированный ранее шрифт. кроме того, следует, собственно, включить графический режим. для этого добавьте такие строки:
Код:
loadfont /boot/grub/unicode.pf2
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else terminal gfxterm; fi
и еще один очень важный момент: в начале файла должна иметься такая строка:
insmod part_msdos
загрузка данного модуля обязательна! без него полученный grub2 увидит только жесткий диск, но не увидит таблицу разделов на нем, и такой LiveCD будет бесполезен.
про настройки цветов/разрешения и всего прочего читайте в вышеупомянутом разделе. а теперь же перейдем к созданию самого меню.
вы можете скопировать нужные пункты из "/boot/grub/grub.cfg", но я рекомендую написать их с нуля, ибо для корректной работы тамошних пунктов потребуется загрузка дополнительных модулей. а написать их несложно, для Linux-системы пункт меню должен иметь такой вид:
Код:
menuentry "9.10 @ 2.6.32" {
search -u uuid_раздела -s
linux /boot/vmlinuz-xxxxxxx root=/dev/sdXY quiet splash single или_что_там_еще
initrd /boot/initrd.img-xxxxxx
}
в качестве uuid нужно задать тот раздел, где находится ваш /boot (если у вас общий / - пишите его, если отдельный /boot-раздел - именно его и указываем, а не /. в случае с отдельным /boot пути будут выглядеть как "/vmlinuz...." и "/initrd....")
для Windows будет что-то такое:
Код:
menuentry "winxp" {
searсh -u uuid_раздела_с_win -s
chainloader +1
}
закончив с файлом, сохраняем его как "grub.cfg" в целевой папке (в моем случае - "~/tmp/iso/boot/grub/grub.cfg"). теперь мы готовы к созданию iso-образа нашего LiveCD. в этом нам поможет утилита grub-mkrescue. команда будет выглядеть так:
Код:
grub-mkrescue --overlay=tmp/iso/ tmp/grub.iso
вместо "tmp/iso" укажите свою папку, вместо "tmp/grub.iso" - путь, куда сохранить полученный iso-образ.
если все успешно - получаем на выходе очень небольшой iso-шник (~2.8M), прожигаем его на rw-шку и пробуем грузиться!
ниже, как и обещал, привожу пример файла "grub.cfg", корректно работающего на LiveCD с комментариями:
(Кликните, чтобы показать/скрыть)

создание LiveCD с GRUB2 на базе имеющегося дистрибутива.
(за идею спасибо тов. komix)
поскольку тратить целую болванку ради записи iso-шника с grub2 в 3 мегабайта было бы глупо, можно совместить приятное с полезным, а именно: LiveCD с grub2 и установочный диск какой-нибудь системы. исходить мы будем из того, что имеется iso некоего LiveCD, к которому мы хотим прикрутить grub2.
порядок действий будет в целом аналогичен описанному в предыдущем пункте. первым делом создадим папку, в которой будем собирать наш новый диск. в ней же создадим папку /boot/grub и папку, в которую будут помещены файлы нашей live-системы (я назову ее live):
Код:
mkdir -p tmp/iso/{boot/grub,live}
теперь нам нужно примонтировать iso-образ нашей системы в свежесозданную папку для нее:
Код:
sudo mount -o loop downloads/some-live-system.iso tmp/iso/live
теперь создайте "grub.cfg", как это описано в предыдущем пункте (не забудьте скопировать файл шрифта, если хотите использовать графическое меню). здесь все аналогично вышеописанному способу, но с той лишь разницей, что в меню мы добавим пункт для загрзуки нашей live-системы.
как именно нужно запускать "живое ядро"? на этот вопрос нет универсального ответа. узнать это можно, покопавшись в настройках прилагаемого загрузчика (обычно это isolinux или же старый grub - в обоих случаях понять логику несложно). приведу конкретный пример для мини-дистрибутива Parted Magic:
Код:
menuentry "Parted Magic" {
linux /live/bzImage
initrd /live/initramfs
}
в данном случае этого будет достаточно. для других систем могут потребоваться дополнительные параметры загрузки ядра. ядро же может лежать в "/live/boot" или в другой папке в зависимости от конкретного дистрибутива.
обратите внимание на то, что здесь не используются строки вида "set root..." или "search...". если вы создали правильный "grub.cfg", то корневым разделом при загрузке устанавливается cdrom, поэтому нет нужды его задавать повторно.
после того, как "grub.cfg" готов, можно приступить к созданию iso-образа:
Код:
sudo grub-mkrescue --overlay=tmp/iso tmp/my-live-system-grub2.iso
продолжительность процесса зависит от размера оригинального дистрибутива. по окончании получаем свежеиспеченный iso-образ с оригинальным дистрибутивом и бонусом в виде grub2.
отмонтируем оригинальный iso:
Код:
sudo umount tmp/iso/live
и прожигаем новый iso-шник на болванку. грузимся и проверяем результат

Grub 2 (part 2)

IV. Advanced
даунгрейд до grub-legacy (возврат старой версии).
в случае, если ваша дружба с grub2 так и не состоялась, вы можете заменить его на старый grub (ныне известный как grub-legacy), который на текущий момент более стабилен. и привычен для многих.
для начала, конечно же, сделаем бэкап важных файлов. создайте резервную копию файлов конфигурации как описано конце I-ой главы. также желательно забэкапить папку "/boot/grub". для этого выполните
Код:
sudo cp -R /boot/grub{,.bak}
теперь мы можем приступить к удалению grub2. для этого удаляем пакеты "grub-pc" и "grub2" (последний может быть не установлен):
Код:
sudo apt-get purge grub2 grub-pc
заметьте: удаление пакетов не приведет к полной очистке папки "boot/grub".
теперь установим grub версии 0.97:
Код:
sudo apt-get install grub
но после установки нам необходимо создать файл menu.lst и другие файлы загрузчика. для этого нужно выполнить еще две команды:
Код:
sudo update-grub
эта команда создаст файл меню загрузки. на заданные ей вопросы отвечайте "yes".
Код:
sudo grub-install /dev/sda
создаст остальные файлы загрузчика и запишет информацию в загрузочный раздел диска (MBR). вместо "/dev/sda" в конце укажите тот жесткий диск, который используется в качестве загрузочного (установлен загрузочным в bios)
если установка прошла успешно - перезагружаемся и видим старый добрый grub с его menu.lst и без лишних хитростей
(Кликните, чтобы показать/скрыть)

создание аварийно-спасательного GRUB2-liveUSB
здесь мы рассмотрим, как создать загрузочную флэшку с установленным на нее grub2, через который можно будет загрузиться в случае, если grub2 на жестком диске безнадежно испорчен. есть, конечно, возможность восстановления с liveCD, но никогда не помешает дополнительная страховка на случай, если это не спасет. тем более, что потребуется для этого не так уж много.
итак, имеем флэшку. на этой самой флэшке нужно будет создать небольшой раздел для установки туда grub2. здесь подразумевается, что вы уметее создавать и форматировать разделы. если нет установите gparted, почитайте его справку и другую доступную информацию.
итак, откусим кусок свободного места и создадим небольшой раздел. 100 мб будет более чем достаточно (впрочем, хватит и 50). в качестве файловой системы выберите ext4/ext3. причина проста; reiserfs займет на 100-мегабайтном разделе 32 мб, а ext4 - всего 8. закончив с разделом, загрузитесь с liveCD.
примонтируйте свежесозданный раздел как папку "/boot/grub" запущенной live-системы. (здесь и далее будем считать, что раздел именуется "/dev/sdb1". подставляйте свое значение, если это не так)
Код:
sudo mount /dev/sdb1 /boot/grub
теперь выполним собственно процедуру установки grub2. для этого запустите
Код:
sudo grub-install /dev/sdb
не забывайте, что при установке мы указываем диск (/dev/sdb в нашем примере), а не раздел! мы по сути скомандовали системе установить grub2 на саму себя, прописав grub2 в MBR указанного диска, но вместо "/boot/grub" файлы загрузчика попадут на флэшку, "что и требовалось доказать".
отмонтируем флэшку
Код:
sudo umount /boot/grub
перезагружаемся.
в принципе, вышеописанных операций достаточно для того, чтобы загрузиться с флэшки в работающий grub2. однако, меню загрузки вы не увидете, а попадете сразу в консоль. если у вас нет опыта работы с консолью grub2, или вы просто хотите сделать процесс более удобным, придется совершить еще несколько действий, чтобы получить полноценный grub2 с менюшкой.
грузимся с жесткого диска, запускаем обычную систему.
монтируем раздел с grub2. по умолчанию он смонтируется автоматом в "/media", причем в качестве точки монтирования будет использован uuid раздела. отмонтируйте его через апплет или значок на рабочем столе и примонтируйте в "/mnt":
Код:
sudo mount /dev/sdb1 /mnt
создадим папки, в которых будут храниться настройки:
Код:
sudo mkdir -p /mnt/config/{default,grub.d}
скопируем туда файлы настроек
Код:
sudo cp -p /etc/grub.d/* /mnt/config/grub.d/
и
Код:
sudo cp -p /etc/default/grub /mnt/config/default
теперь настроим наш новый grub2. если в вашем обычном grub2 вы используете фоновое изображение - отредактируйте "/mnt/config/grub.d/05_debian_theme", указав в качестве картинки имя несуществующего файла, тем самым отключив картинку на фоне. также можете поправить "/mnt/config/default/grub" - например, отключить секундомер, выставив параметр "GRUB_TIMEOUT" в "-1".
после внесения необходимых правок мы можем приступить к созданию "grub.cfg" на нашем разделе. для этого потребуется еще несколько манипуляций. нижеприведенные команды вы можете выполнить по отдельности, но я рекомендую для дальнейшего удобства сохранить эти строки в виде скрипта, поместив файл, например, в "/mnt/config/grub-usb-update" и установив ему права 755.
Код:
sudo mount --bind /mnt/config/default/grub /etc/default/grub
sudo mount --bind /mnt/config/grub.d /etc/grub.d
sudo grub-mkconfig -o /mnt/grub.cfg
sudo umount /etc/default/grub
sudo umount /etc/grub.d
что мы только что сделали? примонтировали файлы конфигурации grub2 в качестве "родных" настроек основной системы. и исходя из них создали grub.cfg, поместив его на флэшку. команда "grub-mkconfig" идентична привычному "update-grub" (на самом деле, "update-grub" лишь запускает "grub-mkconfig", указав, куда сохранить файл), с помощью ключа "-o" мы указали, куда поместить результат трудов команды. после чего мы отмонтируем наши файлы с настройками, возвращая родные файлы на законное место.
если вы последовали совету выше и сохранили скрипт, достаточно будет его запустить одной командой:
Код:
/mnt/config/grub-usb-update
теперь когда вы решите обновить grub2 на флэшке (например, после обновления ядра), достаточно будет примонтровать раздел в "/mnt", выполнить скрипт и отмонтировать флэшку обратно.
ну а сейчас отмонтируем флэшку
Код:
sudo umount /mnt
и перезагружаемся. грузимся с флэшки и видим меню загрузки со всеми нашими системами. радуемся.

загрузка другого grub2 из текущего.
как выяснилось в ходе экспериментов, все весьма просто. загружаемся в grub2, переходим в консоль нажатием "c". загрузка другого grub2 происходит по методу "set root - chainloader - boot". для начала определимся с диском, в MBR которого прописан grub2, который мы собираемся загрузить. выполните команду
Код:
ls
чтобы увидеть список текущих дисков и разделов. диск, с которого производился загрузка будет именоваться (hd0). в нашем примере мы загрузим с флэшки основной grub2 на жестком диске. если флэшка - (hd0), то жесткий диск будет (hd1). выолняем
Код:
set root=(hd1)
или же
Код:
root (hd1)
во втором случае видим сообщение, что файловая система незивестна. это нормально.
передаем управление по цепочке
Код:
chainloader +1
и даем команду на запуск
Код:
boot
и попадаем в искомый загрузчик.

консоль grub2 - команды и хитрости.
здесь мы рассмотрим некоторые команды консоли grub2. все мы разбирать не будем, а изучим лишь самые необходимые и полезные. напомню, чтобы попасть в консоль, нужно нажать "c" во время отображения меню загрузки. итак, начнем!
ls
довольно универсальная команда. при использовании в чистом виде выдает список жестких дисков и разделов.
также она может быть использована как одноименная команда в linux - для вывода содержимого папки. например,
Код:
ls /boot/grub
выведет содержимое папки "/boot/grub" на разделе, который сейчас указан в качестве корневого (об этом чуть ниже).
еще одно полезное свойство комадны "ls" - она позволят получить информацию о любом разделе:
Код:
ls (hd0,5)
сообщит нам тип файловой системы на разделе, метку раздела (если таковая имеется), UUID и дату последнего изменения данных на разделе (в формате UTC).
cat
данная команда аналогична своей тезке в linux - она выводит содержимое заданного файла. используется в формате
Код:
cat /путь/имя_файла
linux
загружает указанное linux-ядро. аналог команды "kernel" в grub-legacy. используется в формате
Код:
linux файл_ядра опция1=значение опция2 опция3
например, так:
Код:
linux /boot/vmlinuz-2.6.32-020632-generic root=/dev/sda5 single
initrd
загружает указанный initrd-образ. используется так:
Код:
initrd /boot/initrd.img-2.6.32-020632-generic
обратите внимание: версия initrd должна соответствовать версии загружаемого ядра!
chainloader
передает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). в общем случае требует указания файла для загрузки:
Код:
chainloader /путь/имя_файла
однако, для NTLDR (загрузчика Windows) можно использовать
Код:
chainloader +1
boot
производит загрузку указанного ядра (заданного с "linux" и "initrd") или же другого загрузчика (заданного через "chainloader"). используется без параметров
root
при использовании без параметров сообщает, какой раздел сейчас используется в качестве корневого (по умолчанию - корневой раздел системы, на которую установлен текущий grub2) и тип файловой системы на этом разделе (для ext3/4 тип будет указан как ext2, это нормально)
также команда может быть использована для задания другого root-раздела. раздел задается в "grub device" формате, то есть "(hd*,*)". например:
Код:
root (hd0,5)
после задания раздела команда сообщит новый root-раздел и тип файловой системы.
примечание: "root hd(*,*)" не всегда корректно срабатывает. более предпочтительным вариантом является "set root" (см. ниже)
set
весьма универсальная команда для изменения различных параметров. служит для задания значений переменных и используется в формате
Код:
set переменная=значение
наиболее необходимое ее применение - для задания root-раздела. для этого изменяется переменная "root", в качестве значения задается необходимый раздел, например:
Код:
set root=(hd0,5)
(именно такая технология используется в "grub.cfg")
также с ее помощью можно, например, "на лету" изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой ее в качестве основной. для этого изменяем переменные "color_normal" и "color_highlight" для обычного пункта (и текста в консоли) и выделенного пункта соответсвенно. например, попробуем такой вариант:
Код:
set color_normal=magenta/green
set color_highlight=light-blue/black
(подробнее о цветах читайте в главе II, раздел "настройка цвета пунктов меню")
search
пожалуй, одна из самых полезных команд. потомок "find" и "uuid" из grub-legacy. служит для поиска раздела по UUID, метке или заданному файлу.
имеет следующие ключи:
-u (или --fs-uuid) - поиск раздела по UUID
-l (или --label) - поиск по метке раздела
-f (или --file) - поиск по указанному файлу
-n (или --no-floppy) - не проверять флоппи-дисковод (чтоб не трещал)
-s (или --set) - установить найденный раздел в качестве значения заданной переменной.
зачем это нужно? дело в том, что при подключении/отключении жестких дисков (и в некоторых других случаях) нумерацию дисков и разделов может "поехать", и тогда наша команда "set root=(hd0,5)" в "grub.cfg" будет вести или в никуда или на раздел не того диска. поэтому в "grub.cfg" вы найдете строчку с "search".
для поиска раздела с известным нам uuid запустим "search" с ключом -"u":
Код:
search -u uuid_нужного_раздела
команда сообщит нам, какой раздел соответствует заданному UUID.
однако, UUID длинный, и хотя его и можно узнать, вводить вручную такое количество символов проблематично, и существует большой шанс сделать ошибку. вместо этого мы воспользуемя поиском по файлу, который точно имеется на нужном разделе. допустим, мы ищем раздел boot-раздел нашей системы. найдем его по файлу "grub.cfg":
Код:
search -f /grub/grub.cfg
обратите внимание, что при использовании такого способа указанный файл должен иметься только на одном разделе!
получив искомое, можно вручную задать нужный раздел в качестве root-раздела, но гораздо проще воспользоваться ключом "-s". если после него не указана переменная, будет использована "root", то есть найденный раздел как раз и будет задан в качестве корневого. допустим, раздел с Windows имеет метку "C_drive". установим его в качестве корневого для загрузки с него:
Код:
search -l C_drive -s
(Кликните, чтобы показать/скрыть)
lsfonts
эта команда отобразит список загруженных в настоящий момент шрифтов (полезно для тех, кто все-таки решил поразвлекаться с настройкой шрифтов в grub2, конвертацией их в .pf-формат и прочим)
help
при использовании в чистом виде выведет список доступных команд. в формате
Код:
help r
выведет справку по всем командам, начинающимся на "r".
Код:
help search
отобразит справку по команде "search"
halt
выключит компьютер (в теории) или введет его в ступор (у меня ).
reboot
перезагрузит компьютер
background_image
позволяет "на лету" изменить фоновое изображение. используется в формате
Код:
background_image /путь/имя_файла
дает замечательную возможность посмотреть на выбранную картинку в действии, избегая лишних перезагрузок. в сочетнии с заменой цветов через "set" позволит довольно быстро подобрать подходящий вариант оформления.
при использовании без параметров сбросит текущее фоновое изображение. однако, заданные цвета останутся, так что если у вас черный цвет текста - на черном фоне вы его не увидите.
примечание: данная команда не заменит ваши настройки оформления, фон будет изменен лишь на текущий сеанс
vbeinfo
выедет список поддерживаемых видеорежимов. этой командой полезно будет воспользоваться перед настройкой разрешения в "/etc/default/grub"
configfile
потомок одноименной команды в grub-legacy. позвоялет загрузить другой файл конфигурации с другим меню вместо текущего "grub.cfg". создав новый файл, вы можете сделать другое меню с другими настройками, оформлением и пунктами, не захламаляя основное меню. используется так:
Код:
configfile /путь/другой_файл_меню
создание и использование новых меню позже будет рассмотрено отдельно.
terminal_output.console
позволяет переключиться на обычную черно-белую цветовую гамму. весьма полезно при работе с консолью в том случае, если у вас установлено фоновое изображение. картинка на фоне - это, конечно, красиво, но на некоторых участках фона может быть не виден текст (если картинка не везде однородная). выполнив эту команду, вы получите контрастную схему (белый текст на черном фоне) и хороший крупный шрифт.
если вы часто используете консоль grub2, имеет смысл добавить в 40_custom пункт с этой командой, например:
Код:
menuentry "black&white mode"{
terminal_output.console
}

ну и для полного счастья ниже я приведу небольшой список премудростей, которые помогут вам облегчить работу в консоли:
уже упомянутое автодополнение команд (как в bash) по нажатию tab. tab в пустой строке выведет полный список доступных команд
это самое автодополнение имеет нетривиальный способ изспользования. если вы не помните, какой раздел вам нужен, напишите "root (hd0," (или "root (hd1." и далее по списку) и нажмите tab. будет выведен список разделов заданного диска с указанием файловых систем, UUID и времени последнего изменения.
имя раздела вида "(hd*,*)" можно использовать в начале пути к файлу, например, вот так:
Код:
cat (hd0,6)/home/username/папка/файл
еще один полезный пример
Код:
ls (hd0,3)/
позволяет просмотреть содержимое заданного раздела без переключения root.

создание дополнительных меню загрузки.
в этом разделе мы рассмотрим создание своих собственных загрузочных меню со своей конфигурацией. суть в том, что вместо уже знакомого нам "grub.cfg" можно загрузить другой файл конфигурации. это позволяет создать дополнительное меню, совершенно другое - с другими пунктами, настройками. оформлением. те, кто имел дело с установкой ArchLinux, могли заметить несколько подменю в grub установочного диска. примерно такой метод мы и будем использовать.
итак, создадим наш новый файл конфигурации. писать с нуля мы его, конечно же, не будем, а сотворим на основе имеющегося "grub.cfg". для чего скопируем последний, дав новое имя, например:
Код:
sudo cp /boot/grub/{grub,custom}.cfg
поскольку файл скопируется с правами 444, выставим ему права на запись:
Код:
sudo chmod 744 /boot/grub/custom.cfg
теперь открываем его в любимом текстовом редакторе и начинаем ковырять. если вы в достаточной мере знаете структуру "grub.cfg" и понимаете, какие строки что делают, можно значительно сократить свой файл, вырезав лишнее, и привести его к более удобочитаемому виду. однако же, можно и не трогать руками все подряд, а изменить лишь интересующие параметры, что мы и проделаем.
для начала найдем строку "set default=...." (у меня это 13-я строка). здесь можно задать пункт меню по умолчанию, указав или его номер или точное название. далее отыщем строку "set gfxmode...." (24-я в моем случае). здесь задается разрешение экрана в привычном формате WxH. можно также указать глубину цвета, например "1024x768x32". можно указать несколько вариантов, при этом если первый не сможет быть установлен, будет загружен второй, если и он не сработает - третий и т.д. варианты перечисляются через запятую и без пробелов:
Код:
set gfxmode=1024x768x32,1024x768x24,1024x768
теперь зададим время отображения меню. для этого ищем строку "set timeout", но именно ту, которая идет после "else" (36). здесь и задается задержка в секундах. установите -1 для отключения таймера.
настроим оформление нашего меню. для задания фонового изображения найдем строку с "if background_image....." (45). (здесь подразумевается, что в вашем grub.cfg используется фоновое изображение. если нет - смотрите пример файла в конце этого раздела). после команды background_image прописан путь к файлу картинки. поменяйте его на нужный файл. (обратите внимание, что разрешение картинки должно соответствовать заданному выше разрешению экрана!).
строкой ниже мы можем задать цвета текста. правятся они точно так же, как и в "/etc/grub.d/05_debian_theme" (подробнее о цветах читайте в главе II, раздел "настройка цвета пунктов меню"). еще можно проделать один интересный трюк: уберите строки с "set color_highlight" и "else". теперь настройка будет такой:
color_normal задает цвет/фон текста сверху и снизу (версия grub и комментарии) и текста в консоли
menu_color_normal отвечает за цвет пунктов меню и фон прямоугольника, в котором они находятся
menu_color_higlight задает цвет/фон выделенного пункта меню.
закончив с настройкой, перейдем собственно к пунктам. ниже идут пункты из вашего "grub.cfg". измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус. ниже будет приведен пример с немного отредактированными тремя пунктами загрузки.
настроив свой файл, сохраните его. теперь нам нужно добавить возможность загрузить его вместо "grub.cfg". для этого в последний нужно будет добавить еще один пункт, что мы сделаем через "/etc/default/40_custom". для смены файла конфигурации в grub2 используется команда "configfile". ей мы и воспользуемся, добавив в "40_custom" запись такого вида:
Код:
menuentry "my very custom menu"{
configfile /boot/grub/custom.cfg
}
если ваш путь к файлу отличается - исправьте его. если вы используете отдельный boot-раздел, путь будет таким: "/grub/custom.cfg". также учтите, что "40_custom" должен заканчиваться пустой строкой!
если вы хотите, чтобы ваше новое меню загружалось вместо стандартного "grub.cfg", установите новый пункт в качестве пункта по умолчанию. также можете установить таймаут для "grub.cfg" в 0 (в "/etc/default/grub"), но перед этим рекомендую протестировать свежеиспеченное меню на работоспособность.
обновите свой "grub.cfg" выполнив
Код:
sudo update-grub
теперь пункт перехода в новое меню появится в обычном. для того чтобы выйти обратно в первое меню, достаточно нажать escape.
вот, в принципе, и вся премудрость. таких файлов можете насоздавать себе хоть десять штук, тут уж зависит от потребностей. ниже я приведу в качестве образца то, что получилось у меня (файл сильно урезан до необходимого минимума):
(Кликните, чтобы показать/скрыть)

MBR - бэкап, восстановление и загрузка через образ.
для тех, кто не знает, поясню: MBR - фрагмент первого сектора жесктого диска, в котором прописан код, запускающий загрузчик. при загрузке с диска оттуда считывается информация о том, как запустить загрузчик. grub2 прописывает свой код в MBR при установке (и это же мы делаем, выполняя "grub-install ... /dev/sda").
на случай повреждения MBR (причины бывают разными) и для возможности быстрого восстановления работоспособности grub2 полезно будет иметь резервную копию MBR жесткого диска. чтобы создать ее, сначала нужно определиться, с какого из жестких дисков производится загрузка (можно посмотреть с помощью "sudo fdisk -l"). после этого скопируем первый сектор (первые 512 байт) диска в файл с помощью команды dd:
Код:
sudo dd if=/dev/sda of=mbr.bin bs=512 count=1
если ваш загрузочный диск - не sda, поменяйте значение на свое. (на самом деле, код загрузчика занимает первые 446 байт, а дальше записана таблица разделов, но для загрузки нашего образа он должен быть не меньше 512 байт).
наш образ готов! данные сохранена в файл "mbr.bin" в вашей домашней директории.
используя полученный образ можно загрузить основной grub2 из-под другого при поврежденном MBR диска. если у вас есть другая установленная linux-система с grub2 на другом жестком диске или загрузочная флэшка с grub2 (создание таковой описано выше) - можете попробовать на практике нижеприведенный совет.
итак, в моем примере я загружаюсь со своей спасительной флэшки с grub2, на которую я предварительно закинул образ MBR своего жесткого диска.
загрузившись в gurb2, выходим в консоль (нажав "c"). указываем в качестве корневого раздела тот жесткий диск, на котором по сценарию попорчен MBR, и с которого мы хотим запустить grub2. можно указать сам диск или любой из его разделов, например так:
Код:
set root=(hd1)
проверим результат командой
Код:
root
если все верно - загружаем наш образ с помощью chainloader. здесь нужно указать полный путь, начиная с раздела, на котором лежит наш файл. флэшка, с которой я загружен именуется (hd0), так что команда будет выглядеть так:
Код:
chainloader (hd0,1)/mbr.bin
если все тихо - даем команду на запуск:
Код:
boot
и наслаждаемся родным grub2.
примечание: в MBR (и, соответственно, в полученном образе) нет четкого указания жесткого диска, поэтому через наш образ загрузится grub2 с того раздела, который был указан в качестве корневого (root) в консоли grub2.
загрузив родную систему, мы можем восстановить ид-под нее MBR диска. но если лишнего grub2 у вас под рукой нет, действовать мы будем с livecd.
грузимся с livecd любой linux-системы (в данном случае поддержка grub2 роли не играет). для восстановления MBR нам нужно будет "раскатать" ранее созданный образ обратно в первый сектор диска. но для начала проверим таблицу разделов, ведь вполне возможно, что grub2 не грузился и из-за нее. для этого выполните
Код:
sudo fdisk -l
если fdisk видит разделы - таблицу разделов трогать не будем, а восстановим только код загрузчика. в этом случае нам нужно перезаписать лишь первые 446 байт. если же "убита" и таблица разделов - все 512. определившись, что именно мы делаем, копируем нужное количество байт из образа в первый сектор диска. в примере ниже таблица разделов в порядке, восстанавливаем только grub2:
Код:
sudo dd if=/mnt/mbr.bin of=/dev/sda bs=446 count=1
если нужно восстановить и таблицу разделов - укажите 512 вместо 446. в качестве значения if пропишите путь к файлу образа, в of - тот диск, загрузочный сектор которого мы восстанавливаем. если все прошло успешно - перезагружаемся, грузимся с починенного диска и радуемся.
еще одна полезная возможность - полученный образ можно использовать для загрузки grub2 через NTLDR (в случае, если grub2 не загружает нормально Windows, и вы хотите сделать NTLDR основным загрузчиком). но об этом как-нибудь позже.

Grub 2 (part 1)

I. GRUB2 - первые шаги.
при первом сравнении grub2 со старым grub самым весомым различием оказывается измененная структура файлов конфигурации. настройка grub2 производится теперь по принципиально иному принципу.
первое же, что бросается в глаза - отсутствие привычного многим "/boot/grub/menu.lst", в котором были прописаны пункты загрузки, таймаут меню и прочие настройки. где это теперь?
в grub2 основным файлом конфигурации является "/boot/grub/grub.cfg". однако же, не торопитесь править его так, как привыкли это делать с "menu.lst". при внимательном прочтении мы видим в начале файла "grub.cfg" такие строки:
Код:
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
и об этом нас предупреждают не просто так. ведь "grub.cfg" генерируется автоматически с использованием нескольких скриптов. поэтому после следующего обновления grub2 ваш "grub.cfg" будет создан заново, и все ваши правки будут утрачены. но это мы подробнее рассмотрим чуть ниже.
перейдем к основным файлам конфигурации grub2. как и упомянуто выше, главным файлом, собственно, отвечающим за загрузочное меню, является "/boot/grub/grub.cfg". кроме него имеются файл "/etc/default/grub" и папка "/etc/grub.d". рассмотрим их подробнее.

/etc/default/grub
данный файл содержит в себе основные настройки для grub2. через него, собственно, они и изменяются. для наглядности ниже приводится примерное содержимое этого файла:
Код:
GRUB_DEFAULT=6
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="2"
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"
мы видим, что файл представляет из себя набор опций в человекопонятном формате ОПЦИЯ=ЗНАЧЕНИЕ. мы не будем здесь рассматривать все представленные параметры, поскольку рядовому пользователю вполне достаточно понимания пары-тройки основных параметров.
наиболее часто встречающаяся потребность при настройке grub - изменение стандартного пункта загрзки и/или времени показа меню. рассмотрим же, как это делается.

изменение стандартного пункта загрузки.
по умолчанию стандартный пункт (выделенный при показе меню) - верхний в списке. после установки Ubuntu она окажется наверху, а Windows, например, будет последним пунктом. после обновления ядра первым пунктом списка становится загрузка с новым ядром. это происходит потому, что именно первый пункт загрузки является стандартным по умолчанию.
за это, собственно, отвечает параметр "GRUB_DEFAULT". значением его является номер пункта в меню загрузки, который должен быть выбран стандартным. причем нумерация начинается с нуля. значение по умолчанию - 0, поэтому и выбирается первый пункт. для того. чтобы выбрать другой пункт, нам нужно узнать, каким по счету он будет в списке. тут есть два варианта: просмотреть содержимое "/boot/grub/grub.cfg" и сосчитать, какой по счету окажется нужная запись, или же перезагрузиться и более наглядно посмотреть то же самое в меню загрузки (перед этим побегайте стрелочками по меню, чтобы остановить таймер). вторый вариант отличается более наглядным представлением, что проще для неопытного пользователя. в обоих случаях не забывайте о порядке нумерации - 0, 1, 2, 3 и так далее. то есть, пятому сверху пункту будет соответствовать знаение 4, второму - 1, первому - 0. в вышеприведенном примере установлено значение 6, то есть стандартным задан седьмой пункт меню.
кроме задания конкретного пункта есть еще другие интересный варианты. например, в качестве значения можно указать "saved" - тогда при загрузке будет выбран тот пункт, который был загружен в прошлый раз.
или же можно указать точное название пункта. в данном случае оно должно быть именно таким, каким мы его видим в "/boot/grub/grub.cfg". при этом значение должно указываться в кавычках! данный способ удобен тем, что после обновления ядра не придется изменять настройки из-за съехавшей нумерации
(Кликните, чтобы показать/скрыть)

изменение времени отображения меню.
по умолчанию меню загрузки отображается 10 секунд, после чего загружается стандартный пункт (если раньше не нажат enter и не выбран другой пункт, что останавливает таймер). с изменением задержки все совсем просто.
за эту задержку отвечает параметр "GRUB_TIMEOUT" (не путайте с "GRUB_HIDDEN_TIMEOUT"!). значение задается в секундах. обратите внимание, что цифра указывается в кавычках. в нашем примере это значение - 2, то есть меню отображается две секунды.
кроме того, есть одна хитрость. если поставить значение "-1", то меню будет отображаться до тех пор, пока пользователь не выберет какой-либо пункт. то есть без всяких таймеров и утекающих секунд.

"скрытое" меню.
в случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а grub2 будет загружать вас напрямую в систему. однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. для этого предусмотрено "скрытое меню".
за него отвечает параметр "GRUB_HIDDEN_TIMEOUT". в случае, когда установлены другие ОС, этот параметр закомментирован (# в начале строки). в случае с единственной ОС он будет активен. значение его задает задержку в секундах. grub2 приостановит загрузку на заданное количество секунд, давая пользователю возможность вызвать меню загрузки, нажав Escape.
если значение установлено в 0, то задержки не будет. однако, пользователь все равно сможет вызвать отображение меню, удерживая при загрузке shift.
параметр "GRUB_HIDDEN_TIMEOUT_QUIET" отвечает за отображение таймера во время паузы. при значении "true" таймер показан не будет. "false" - будет отображаться.

изменение стандартных параметров загрузки ядра
иногда бывает необходимо загружать ядро системы с какими-либо особыми параметрами. например, для корректной работы специфического оборудования. в этом случае весьма полезен будет параметр "GRUB_CMDLINE_LINUX_DEFAULT". он отвечает за те параметры, с которыми запускаются linux-ядра при загрузке. значение его по умолчанию - "quiet splash", что приводит показу графической заставки при запуске системы без показа какой-либо текстовой информации. вы можете добавить необходимые вам параметра запуска ядра, приведя это значение к виду "quiet splash your_param1 your_param2", то есть дописав через пробел нужные параметры.
(Кликните, чтобы показать/скрыть)

/etc/grub.d
эта папка содержит в себе скрипты, которые используются при создании "grub.cfg". при обновлении grub2 они находят все установленные на компьютере системы и ядра и формируют в "grub.cfg" меню загрузки, которое мы и видим. два основных из них - "10_linux" и "30_os-prober" отвечают за поиск linux-ядер и остальных ОС на других разделах соотвественно.
файл "40_custom" позволяет добавлять свои пункты загрузки. это может быть полезно, если вы, например, хотите добавить какие-то особые варианты загрузки системы.
(Кликните, чтобы показать/скрыть)
примечание: файл "40_custom" должен заканчиваться пустой строкой, иначе последний пункт не будет отображаться в меню!

применение изменений.
после того, как мы отредактировали и сохранили наши файлы, радоваться еще рано. теперь нужно закончить дело, обновив наш "/boot/grub/grub.cfg". это довольно просто - нужно всего лишь выполнить команду
Код:
sudo update-grub
она выполнит скрипты в папке "/etc/grub.d" и применит заданные в "/etc/default/grub" параметры. после этого смело перезагружаемся и видим, что все работает как надо. ну или не работает...
если все прошло успешно, то в выоде консоли вы увидите спсиок найденных grub2 ОС и linux-ядер. выглядит все это примерно так:

тот же самый "update-grub" происходит и при обновлении ядра.

нюанс с нумерацией дисков и разделов.
в grub2 имеется еще одно важное отличие от старого grub. связано оно с нумерацией жестких дисков и их разделов.
в grub нумерация физических дисков и нумерация разделов начинались одинаково - с нуля. первый физический диск (sda в системе) обозначался "hd0", второй (sdb) - "hd1", и так далее. это же осталось и в grub2.
нумерация же разделов диска изменилась. если в grub первый раздел первого диска (sda1) именовался "hd0,0", четвертый (sda4) - "hd0,3", то теперь, в grub2, цифра раздела в grub2 соотвествует цифре раздела в системе. то есть, sda1 теперь будет "hd0,1" (а не "hd0,0"), sdb4 - "hd1,4".
проще говоря, нумерация дисков идет с нуля, а нумерация разделов - с единицы!

резервная копия.
перед каким-либо редактированием обязательно сделайте бэкап файлов конфигурации. например, выполнив последовательно эти строки:
Код:
datev=$(date +%Y_%m_%d)
mkdir -p ~/.grub.bak/$datev
cd ~/.grub.bak/$datev
mkdir -p boot/grub etc/default
cp /boot/grub/grub.cfg boot/grub
cp -Rp /etc/grub.d etc
cp /etc/default/grub etc/default
(можно сохранить данный скрипт в /usr/bin, назвать, к примеру, "grub-backup" и дать права 755. теперь для резервного копирования grub2 достаточно будет выполнить команду "grub-backup")

II. украшательства.
установка фонового изображения.
вы можете выбрать и установить полноцветное изображение в качестве фона в меню загрузки grub2. размер изображения должен соответствовать разрешению grub2 (по умолчанию - 640x480, задается в "/etc/default/grub"), формат файла - png или tga.
вы можете установить готовый набор из нескольких подходящих для grub2 изображений, выполнив команду
Код:
sudo apt-get install grub2-splashimages
(не путайте пакет grub2-splashimages с пакетом grub-splashimages, который не совместим с grub2!). эти изображения будут помещены в папку "/usr/share/images/grub", которую нужно будет добавить в файл конфигурации (см. ниже).
фоновое изображение задается в файле "/etc/grub.d/05_debian_theme". найдите в нем строку такого вида:
Код:
for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga} ; do
те, кто более-менее знаком с bash, узнают прием с перечислением в фигурных скобках. для остальных: все на так сложно, как может показаться. в первых фигурных скобках (в нашем примере - "{/boot/grub,/usr/share/images/desktop-base}") перечислены папки, в которых grub2 будет искать подходящие для установки изображения. далее (после слэша) указано имя файла изображения (без расширения!), которое мы хотим установить в качестве фона (здесь - "moreblue-orbit-grub"). вторые фигурные скобки ("{png,tga}") определяют расширения файлов, которые grub2 будет пытаться использовать в качестве фона. заметьте, что пункты в фигурных скобках перечисляются через запятую и не разделяются пробелами!
по умолчанию изображения ищутся в папках "/boot/grub" и "/usr/share/images/desktop-base". изображения из пакета grub2-splashimages у нас распаковались в "/usr/share/images/grub". поэтому мы должны добавить эту папку в список мест, где grub2 будет искать изображения. добавим еще один пункт в первые фигурные скобки.
сразу же определимся с выбором картинки. я выбрал последнюю, переименовав файл для удобства в "winter.tga". заменим имя ("moreblue-orbit-grub") на имя выбранной картинки (в моем случае - "winter"). в итоге получим такую строку:
Код:
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/winter.{png,tga} ; do
заметьте, что между именем файла и вторыми фигурными скобками должна стоять точка!
как это работает: grub2 последовательно просматривает заданные папки и ищет в них файл с заданным именем и одним из перечисленных расширений. цикл прекращается как только найдено первое подходящее изображение. таким образом, файл с подходящим именем присутствует в нескольких папках, будет взят файл из той папки, которая раньше указана в списке. аналогично, если изображение представлено в разных форматах (например, "image.png" и "image.tga") - выбран будет файл с тем расширение, которое первым указано во вторых фигурных скобках.
интересности:
  • вы можете добавить любую папку с изображениями, владельцем которой вы являетесь. это упростит добавление/изменение изображений. однако, заметьте: при этом root должен иметь как минимум права r-x на эту папку. также не стоит добавлять папки с шифрованного home-раздела, т.к. на момент загрузки он еще не примонтирован. лучше просто сделайте себя владельцем папки "/usr/share/images/gub" и храните все картинки там.
  • помимо PNG и TGA поддерживается также формат JPEG. но на текущий момент реализована только поддержка jpeg с 8-битным цветом. поэтомуиспользуйте jpeg-файлы только если вы понимаете, что такое глубина цвета и как сохранить изображение в 8-битном цвете. для того, чтобы добавить поддержку jpeg-файлов, приведите вторые фигурные скобки к такому виду: "{png,tga,jpg,jpeg}".

настройка цвета пунктов меню.
цвета пунктов меню также задаются в файле "/etc/grub.d/05_debian_theme". найдите ближе к концу файла следующую секцию:
Код:
if background_image `make_system_path_relative_to_its_root ${bg}` ; then
set color_normal=black/black
set color_highlight=black/light-gray
else
EOF
fi
здесь и настраиваются цвета для пунктов меню загрзки. строка "set color_normal" отвечает за цвета обычного (невыделенного) пункта меню. "set color_highlight" - за цвета выделенного пункта. вот эти две строки мы и будем изменять.
значение каждой из этих строк представляет собой два цвета, разделенные слэшем. первый цвет - это цвет текста. второй цвет - цвет фона строки.
вот список доступных цветов:
(Кликните, чтобы показать/скрыть)
заметьте, что black (черный) при использовании в качестве второго параметра (т.е. цвета фона) в результате даст прозрачный фон, без какой-либо заливки, текст прямо поверх картинки. использование black в качестве цвета текста дает черный текст.
пример:
Код:
set color_normal=black/black
set color_highlight=black/light-gray
в моем случае заданы следующие параметры: обычный пункт - черный текст, прозрачный фон; выделенный пункт - черный текст, серая подсветка строки.
примечание: не перепутайте вышеописанную секцию с секцией "set_mono_theme", что в начале файла! последняя отвечает за цвета меню в том случае, если фоновое изображение отсутствует.

III. восстановление GRUB2.
после, например, установки Windows, вы можете столкнуться с тем, что при загрузке будет отображаться только меню загрузки Windows, а меню grub2 вы не увидите вовсе, что приведет к невозможности загрзуить что-либо кроме Windows. такое происходит из-за того, что Windows при установке затирает загрузочную область жесткого диска (так назывемый MBR-раздел), удаляя оттуда запись загрузчика grub2.
для восстановления grub2 вам понадобится liveCD Ubuntu 9.10 или любой другой современной системы, включающей grub2 в свой дистрибутив. архитектура LiveCD должна соответствовать архитектуре вашей системы! узнать текущую архитектуру можно с помощью команды "arch" или "uname -m". "i686" соответствует 32-битной архитектуре, "amd64" - 64-битной

востановление GRUB2 с LiveCD.
загрузитесь с вашего LiveCD (предварительно выберите меню устройств загрузки при наличии такового или же установите cd-привод первым boot device в BIOS). запустите консоль.
для начала нам нужно будет узнать, на каком диске и на каком разделе установлена Ubuntu. если вы не помните этого - воспользуйтесь командой
Код:
sudo fdisk -l
для работы нам понадобится /-раздел (root). примонтируйте его командой
Код:
sudo mount /dev/sda5 /mnt
в моем случае корневой раздел системы - /dev/sda5, вы же используйте свое значение. если у вас /boot сделан отдельным разделом, его также надо будет примонтировать:
Код:
sudo mount /dev/sda3 /mnt/boot
также монтируем папку /dev нашей live-системы как /dev нашего root-раздела:
Код:
sudo mount --bind /dev /mnt/dev
и папку /proc как /proc root-раздела:
Код:
sudo mount --bind /proc /mnt/proc
теперь выполняем следующую команду:
Код:
sudo chroot /mnt /bin/bash
теперь вы - root-пользователь в системе, корневым разделом которой считается /mnt, то есть корневой раздел вашей настоящей системы. и вот мы готовы обновить MBR-раздел жесткого диска, переустановив grub2. но для начала нам нужно определиться, с какого физического диска загружается наш компьютер. если у вас один жесткий диск, разбитый на разделы - он будет именоваться sda. если несколько - первый из них - sda, второй - sdb, и так далее. если вы не знаете, какой жесткий диск установлен в качестве загрузочного, посмотрите соответствующую опцию в BIOS. обычно жесткий диск указан по модели (например, так: ST9160310AS). чтобы узнать, какому диску в системе соответствует данная модель, выполните такую команду:
Код:
for d in /dev/sd[a-z] ; do echo "$d: $(sudo hdparm -I $d | grep -i 'model')" ; done
кроме того, в Ubuntu 9.10 можно воспользоваться утилитой palimpsest ("система - администрирование - дисковая утилита").
определившись с загрузочным диском (в нашем примере - sda), ставим на него grub2:
Код:
grub-install /dev/sda
если вы столкнетесь с какими-либо ошибками - попробуйте перезапустить команду с ключом --recheck:
Код:
grub-install --recheck /dev/sda
обратите внимание: мы устанавливаем grub2 на физический диск (sda, sdb...), а не на раздел (sda3, sdb1...)!
если все прошло успешно, выходим из chroot командой
Код:
exit
отмонтируем наши диски и папки:
/dev нашей live-системы:
Код:
sudo umount /mnt/dev
/proc live-системы
Код:
sudo umount /mnt/proc
boot-раздел, если таковой монтировался отдельно:
Код:
sudo umount /mnt/boot
и собственно, корневой раздел:
Код:
sudo umount /mnt
все! перезагружаемся, восстанавливаем порядок загрузки в BIOS (ставим жесткий диск на первое место) и смотрим результат.

востановление GRUB2 с LiveCD. способ 2 (без chroot)
нам опять же понадобится LiveCD Ubuntu 9.10 или другой системы с поддержкой grub2. в отличие от предыдущего способа, мы не будем запускать установщик через chroot, что позволит сократить количество требуемых действий.
итак, загружаемся с выбранного LiveCD, запускаем консоль. вместо использования chroot мы воспользуемся ключом "--root-directory". но для начала убедимся, что данная опция поддерживается нашей live-системой. если вы работаете с Ubuntu 9.10 Desktop, можно не волноваться. в ином случае выполните
Код:
grub-install --help
если в описании опций присутствует вышеупомянутый ключ "--root-directory" - все в порядке. теперь нам нужно примонтировать корневой раздел системы. если вы не помните, на каком разделе стоит система, вам поможет
Код:
sudo fdisk -l
определившись с корневым разделом, монтируем его. пусть в нашем примере это будет sda5:
Код:
sudo mount /dev/sda5 /mnt
если у вас выделен отдельный boot-раздел, примонтируйте и его. допустим. это sda2
Код:
sudo mount /dev/sda2 /mnt/boot
теперь переходим собственно к установке grub2. ключ "--root-directory" позволяет указать, что использовать в качестве корневой директории. нам нужен корневой раздел нашей системы, который примонтирован в /mnt. поэтому выполняем:
Код:
sudo grub-install --root-directory=/mnt /dev/sda
как и в предыдущем способе, grub2 устанавливается на физический диск, а не на раздел! в качестве диска нужно указать тот диск, который установлен загрузочным в bios.
если все пройдет успешно, установщик выведет сообщение об успешном завершении и список обнаруженных жестких дисков, которые были добавлены в "device.map". если все это есть - отмонтируем диски, перезагружаемся и радуемся. если будет выведен неполный список дисков - отредактируйте файл "device.map" в корневой папке установленной системы (в описанном примере - "/mnt/boot/grub/device.map") и поправьте его, добавив остальные диски и поправив нумерацию. файл должен иметь вид
Код:
(hd0) /dev/sda
(hd1) /dev/sdb
и так далее для всех жестких дисков. сохраните файл и повторно выполните команду grub-install, как описанно выше. теперь должен отобразиться правильный список дисков. отмонтируем диски и перезагружаемся.

загрузка системы при частичной неработоспособности GRUB2.
в некоторых случаях может оказаться так, что отдельнные файлы grub2 будут повреждены (например, в результате сбоя при выполнение "update-grub"). однако, иногда есть шанс загрузиться в свою систему и восстановить grub2 из нее без необходимости полной переустановки оного.
если при загрузке grub2 вы видите сообщения об ошибках - не спешите предаваться панике. все может быть еще вполне поправимо. на данный момент наша главная цель - попасть в консоль grub2. вы можете сразу увидеть ее на экране, или же будет предложено что-либо нажать или выбрать для запуска консоли. в любом случае, если вам удалось запустить консоль - радуйтесь, шансы на спасение увеличены!
консоль grub2 похожа на более привычную оболочку bash. здесь также поддерживается автодополнение команд по нажатию tab. если же нажать tab в пустой строке - мы увидим полный список доступных команд. что ж, приступим к процедуре запуска системы. для начала нам нужно задать root-раздел, то есть раздел, на который установлена наша система. в моем случае это "/dev/sda5". (в grub2 разделы задаются в виде "hd*,*". если вы мало знакомы с нумерацией разделов в grub2 - почитайте пункт "нюанс с нумерацией дисков и разделов" в I главе). root-раздел задается командой
Код:
set root=(hd0,5)
в моем случае это "hd0,5", он же "/dev/sda5", то есть пятый раздел первого диска. полный список доступных разделов можно получить уже знакомой многим командой "ls". она выдаст что-то вроде
Код:
(hd0,1) (hd0,2) (hd1.1) (hd2,1)
после того, как вы задали root-раздел, можно удостовериться в том, что все получилось, выполнив команду "root". она выдаст сообщение следующего вида:
Код:
(hd0,5): filesystem is ext2
некоторых, наверно, смутит упоминание ext2. не волнуйтесь, так и должно быть (для файловых систем ext2/3/4 в grub2 используется общий драйвер)
после того, как задан root-раздел, мы должны указать, какое ядро следует загрузить. это задается командой "linux". укажите то ядро, с которым вы обычно загружаетесь. в моем случае команда будет выглядеть так:
Код:
linux /boot/vmlinuz-2.6.32-020632rc6-generic root=/dev/sda5
не пугайтесь, если вы не помните номер вашего ядра. просто напишите "linux /boot/vmlinuz" и нажмите tab. на экран будет выведен список доступных ядер.
обратите внимание на параметр "root=/dev/sda5" в конце строки! здесь также нужно указать ваш root-раздел, но уже в более привычном формате. без этого система может не загрузиться.
вместе с ядром следует загрузить initrd (это образ, содержащий все необходимое для определения жесткого диска, монтирования корневой ФС и продолжения зарузки системы). делается это командой "initrd". нужно загрузить initrd-образ, версия которого соответствует версии загружаемого ядра:
Код:
initrd /boot/initrd.img-2.6.32-020632rc6-generic
после этого можно загрузить систему командой
Код:
boot
в результате всех манипуляций мы должны успешно загрузиться в родную систему. а там уже можно выполнить "update-grub" и при необходимости восстановить нужные файлы из резервной копии (которую вы, конечно, делали).
(Кликните, чтобы показать/скрыть)
если же вышеприведенный метод не сработал (ядро не загрузилось или же вы вовсе не можете попасть в консоль grub2) и ничего не загружается - тут уж дело идет к переустановке grub2, что описана выше.
(Кликните, чтобы показать/скрыть)