Asus P52F-380M и Debian
Недавно я обзавёлся новой игрушкой — Asus P52F-380M. В общем и целом ноут хороший, но некоторые моменты вызывают раздражение. Например, клавиатура немного прогибается (в прямом смысле слова), но когда привыкаешь и начинаешь набирать, не глядя (я, к стыду своему, всё ещё не обучился слепому набору), этот недостаток перестаёт волновать. Гораздо больше раздражает идиотское расположение стрелочек:
То есть кнопка «вправо» находится в области, занимаемой numpad’ом, что, поверьте мне, очень неудобно (в основном из-за огромного RgtCtrl, который я постоянно нажимаю вместо стрелочки влево). Даже на EeePC сделали лучше:
Думаю, теперь я таки перейду на hjkl в vim’е ☺
В остальном дизайн и сборка, к счастью, претензий не вызывают, так что перейдём наконец к теме поста — установке и последующей настройке моего любимого Debian.
Замечу, что в данном ноутбуке используется процессор Intel Core i3, а значит, лучше всего использовать Debian, собранный под amd64. Надеюсь, читатели этого блога в состоянии сами установить систему (если нет — замечательная инструкция virens’а вам в помощь).
Сначала я попытался поставить Squeeze, но после установки наткнулся на неприятный баг: внешние колонки ноутбука продолжают играть даже когда воткнуты наушники. Мириться с этим никак нельзя, тем более что в LiveCD Ubuntu 10.10, оказавшемся под рукой, всё работало. Признаюсь, я не стал долго ковыряться и просто поставил Wheezy, в котором, к счастью, всё работало из коробки.
Впрочем, даже в Wheezy с ходу не заработали некоторые вещи, в частности:
- веб-камера выдавала перевёрнутое изображение;
-
wicd-curses
не видел мою Wi-Fi-точку; - из Fn-клавиш работали только три: Fn+F5/Fn+F6, регулирующие яркость монитора, и Fn+F7, которая монитор выключала;
-
pm-suspend
иpm-hibernate
вроде как работали, но не выключали машину; - противно пищал PC speaker (он не настоящий, конечно же, просто эмуляция).
Карт-ридер я на работоспособность не проверял из-за отсутствия подходящих карточек, но наличие в выводе lspci
SD Bridge внушает надежду.
Ну-с, проблемы перечислены — вперёд, на барикады! ☺
К счастью, для камеры и suspend’а решения приведены в Linux Laptop Wiki. Для полноты поста я размещу здесь вольный пересказ этих рецептов.
Веб-камера
Починить это раз и навсегда (слегка поправив какой-нибудь конфиг), к сожалению, не получится. Единственный выход — все приложения, использующие веб-камеру, запускать с библиотекой v4l1compat.so
. Для начала ставим соответствующий пакетик:
$ sudo aptitude install libv4l-0
После этого все приложения, использующие веб-камеру, следует запускать следующим образом (на примере MPlayer’а):
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so mplayer tv://
Для удобства можно создать алиас — библиотека не нарушает работоспособность программы, так что можно подгружать её даже в тех случаях, когда веб-камера вам не нужна.
Suspend и hibernate
Как гласит Linux Laptop Wiki, питание не выключается из-за неотключенных USB-устройств. Чинится всё написанием скриптов, которые перед засыпанием отключают устройства, а потом подключают обратно, но тут всплывает неприятный баг: машинка успешно засыпает и просыпается, но в точках монтирования флешек становится пусто. Почему так и как это исправить, я ещё не понял. Stay tuned.
В общем, сделать нужно следующее:
ставим любимый пакетик для suspend/hibernate. Я пользуюсь
pm-utils
:$ sudo aptitude install pm-utils
создаём конфиг с модулями, которые нужно выгружать перед suspend’ом:
$ sudoedit /etc/pm/config.d/modules
и пихаем в него вот что:
SUSPEND_MODULES="usb_storage mac80211 cfg80211 btusb bluetooth ahci libahci sdhci_pci sdhci led_class ath9k ath9k_common ath rfcomm sco bnep l2cap asus_laptop ehci_hcd"
Не забываем разрешить утилитам читать его:
$ sudo chmod a+r /etc/pm/config/d/modules
создаём скриптик, который будет отключать и подключать устройства:
$ sudoedit /etc/pm/sleep.d/10_unbindusb
и помещаем в него следующее:
#!/bin/bash function unbind_usb { for driver in ehci ohci uhci; do cd "/sys/bus/pci/drivers/${driver}_hcd"; ids=$(ls | grep :); echo $ids > /tmp/DISABLED_$driver; for id in $ids; do echo "Unbinding $id"; echo -n "$id" > unbind; disabled="$disabled $id"; done; done; } function bind_usb { for driver in ehci ohci uhci; do cd "/sys/bus/pci/drivers/${driver}_hcd"; for id in $(cat /tmp/DISABLED_$driver); do echo "Binding $id"; echo -n "$id" > bind; done; rm /tmp/DISABLED_$driver; done; } case "$1" in hibernate|suspend) unbind_usb; ;; thaw|resume) bind_usb; unbind_usb; bind_usb; ;; *) exit 1; ;; esac; exit 0;
даём скрипту необходимые права:
$ sudo chmod u=rwx,go=rx /etc/pm/sleep.d/10_unbindusb
Теперь можно спокойно ложить машинку в suspend командой pm-suspend
(от рута, конечно же). Не забывайте также о hibernate и suspend-hybrid.
Если после просыпания у вас не определяются USB-устройства, перезагрузите модуль ehci_hcd
:
$ sudo rmmod ehci_hcd
$ sudo modprobe ehci_hcd
UPD 14.02.2012: даже после вышеприведённых инструкций машинка иногда не просыпалась (точнее, просыпалась, но на этапе загрузки образа уходила в ребут). Только что поставил linux-image-3.2.0-1-amd64
— шесть циклов hibernate пройдены на «ура» (причём в одном из случаев система засыпала от AC, а просыпалась от аккумулятора; в ещё одном случае было наоборот; во всех остальных — AC).
Wi-Fi
Беспроводная сеть была чуть ли не самой простой проблемой из всех. Следать нужно следующее:
поставить менеджер сетевых соединений wicd (помимо curses-клиента существуют также gtk и cli):
$ sudo aptitude install wicd wicd-curses
прописать в
/etc/network/interfaces
беспроводной интерфейс:$ sudoedit /etc/network/interfaces
В конец файла нужно дописать следующее:
allow-hotplug wlan0 iface wlan0 inet manual
прописать
wlan0
в настройках wicd, для чего в curses-интерфейсе (запускаемом с помощью командыwicd-curses
) нужно нажать P (это большая английская буква P) и тут же в поле Wireless Interface написать заветное «wlan0» (без кавычек)жмакнуть F10, чтобы сохранить настройки
После этих нехитрых манипуляций ноутбук начинает-таки видеть беспроводные точки доступа.
Кстати говоря, Fn+F2 работает из коробки, только лампочка на передней панели, показывающая состояние Wi-Fi, не работает. Меня, впрочем, это мало волнует, поэтому я (пока что) не разбирался, почему так.
UPD: за лампочки отвечает модуль asus_laptop
. Не знаю, что там у меня случилось во время написания статьи, но сейчас, спустя неделю, модуль загружается сам, так что лампочки в порядке.
Fn-клавиши
Сразу после установки работали только клавиши, регулирующие яркость монитора, и Fn+F2, отключающая/включающая Wi-Fi. Мне очень сильно не хватало возможности регулировать громкость звука (и вообще выключать его), так что пришлось отлавливать события acpi и писать обработчики. На самом деле это не так сложно, как может показаться. Следуйте инструкции:
создаём файлы, задающие события, на которые мы хотим реагировать (надеюсь, вы уже запомнили команду
sudoedit
, потому что на этот раз я просто покажу содержимое файлов, не расписывая процесс их создания):$ cat /etc/acpi/events/volume_mute event=hotkey ATK0100:00 00000032 action=/etc/acpi/volume_mute.sh
$ cat /etc/acpi/events/volume_up event=hotkey ATK0100:00 00000030 action=/etc/acpi/volume_up.sh
$ cat /etc/acpi/events/volume_down event=hotkey ATK0100:00 00000031 action=/etc/acpi/volume_down.sh
Если какой-то из Fn-хоткеев у вас работать не будет, запустите
acpi_listen
, понажимайте хоткей и посмотрите, соответствует ли вывод строке «event» (обратите внимание, что acpi присваивает событиям последовательные номера — их включать в строку event нельзя)создаём обработчики:
$ cat /etc/acpi/volume_mute.sh #!/bin/sh amixer sset 'Master' toggle
$ cat /etc/acpi/volume_up.sh #!/bin/sh amixer sset 'Master' 2+
$ cat /etc/acpi/volume_down.sh #/bin/sh amixer sset 'Master' 2-
заставляем
acpid
перечитать настройки:$ sudo pkill -SIGHUP acpid
PC speaker
«Пищалка» в данном ноуте детская, не настоящая даже — вместо взрослого PC speaker’а ноутбук пищит колонками. Отключается это тоже по-детски: достаточно открыть alsamixer
(выполнив в терминале одноимённую команду), выбрать ползунок Beep и выключить его (нажав m).
Как видим, ни одной серьёзной проблемы — все вещи настраиваются парой изменений в конфигах. И кто после этого посмеет сказать, что Linux не готов для потребителя? ☺
Comments (migrated from Blogger)
On 2011-09-05T15:28:56.227+03:00, Minoru wrote:
Упс… Спасибо, GalS — пофикшено!
On 2011-09-06T07:57:36.590+03:00, goblinyara wrote:
>>Правда, в TTY спикер все равно будет эмулироваться — как это побороть, я не знаю.
alsamixer, там будет PCM, убавляете в ноль, и не надо шаманства с xset=)On 2011-09-06T13:05:52.938+03:00, Minoru wrote:
goblinyara, PCM — это, так сказать, «общесистемный» регулятор. Если убрать его в ноль, звук пропадёт во всей системе. Но все равно спасибо — пока проверял PCM, заметил Beep. Mute'им этот регулятор — и «пищалка» замолкает даже в TTY. Спасибо!
On 2011-09-11T03:17:01.243+03:00, virens wrote:
Знатный пост, баянщики и графоманы одобряют :-)
Про acpi_listen - это не панацея, надо сказать. У меня на ноутбуке оно вообще нифига не слышит (никаких выхлопов на нажатие спецклавиш). Тем не менее, Яркость, ВайФай и переключение на внешний монитор работают. Ни разу не из коробки, между прочим.
Про вайфай - тебе крупно повезло, отец, что в ядре поддерживается radio frequency kill switch (rf_kill). Это была большая боль в пояснице, ибо найти это в конфигах ядра было делом непростым (см. ту же ссылку).
И да, спасибо за ссылку на мой старый пост по дебиану. Забавно, но это до сих пор один из самых посещаемых постов по статистике….
On 2011-09-05T14:50:26.971+03:00, GalS wrote:
ссылка на инструкцию virens'а - на редактирование поста?