LINUX.ORG.RU

[Samsung][RV-520] Не работают клавиши <Fn + Up/Down/F9>

 


1

1

Доброго всем.

Купил давеча Samsung RV-520 ― машинка, бесспорно, достойная. Но не заработали некоторые «горячие» клавиши, как то: Fn + Up, Fn + Down и Fn + F9. Первые две комбинации должны регулировать яркость подсветки дисплея, а последняя ― включать / отключать беспроводные устройства.

Пробовал разные рецепты, но решительно ни один не помог. В основном, в мануалах всё сводится к установке пакетов из PPA «voria», передаче ядру параметра acpi_backlight=vendor (ну, иногда ещё говорят, дескать, нужно отключить KMS,― ну, у меня-то он и так отключен, ибо установлен блоб nvidia, а nouveau «заблэклистчен») и прописыванию в xorg.conf'е строки Option «RegistryDwords» «EnableBrightnessControl=1». Также встречал мануал с редактированием правил udev'а.

Первый вариант, естественно, мне не подходит, т.к. не Ubuntu; а разобраться со вторым ― не хватило скилов (хотя, уверен, что оно тоже не сработает). Дело в том, что, в отличие от всех примеров «в googl'e», у меня проблема проявляется несколько иначе: в мануалах у людей, если не работает, то вообще никак; а в моём случае на мониторе показывается изменение уровня яркости (всплывает полоска, похожая на ту, что появляется при регулировке звука), а на самом деле изменения уровня яркости подсветки не наблюдается.

Интересно то, что при нажатии Fn + Up/Down также происходит изменение содержимого файлов actual_brightness и brightness в директории /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/backlight/acpi_video0/ (циферки там меняются от 1 до 7), но толку от этого, увы, нет.

$ sudo dmidecode -s system-product-name
RV420/RV520/RV720/E3530/S3530/E3420/E3520

В /lib/udev/rules.d/95-keymap.rules и /lib/udev/rules.d/95-keyboard-force-release.rules упоминаний о моей модели нет.

После того, как в /etc/acpi/events/videoconf раскомментировал строки:

event=video.*
action=/usr/sbin/vbetool dpms on
перестал сбрасываться уровень яркости подсветки (раньше сбрасывалось примерно на 50%) после выхода из спячки и отключения сети питания. Теперь яркость дисплея всегда «выкручена» до уровня 100% (и убавить её я не могу).

rfkill ничего не знает о беспроводной карте:

$ rfkill list
0: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no
Но это меньшее из зол, т.к. и Wi-Fi, и BlueTooth можно «отключать мышкой» в соответствующих апплетах.

В общем, как мне заставить работать регулировку яркости и, по возможности, включение / отключение беспроводных интерфейсов?

// Ах да, на всякий случай создал багрепорт в багзилле RedHat'а. Но регулировку яркости, конечно, хочется получить как можно скорее.

★★★★★

Последнее исправление: carasin (всего исправлений: 1)

Это известная проблема самсунговских ноутбуков и/или шапковских ядер. У меня тоже самое на нетбуке N100 с CentOS 6. Устройство подсветки вроде есть, но оно ничего не регулирует.

А на предустановленной Meego все кнопки из коробки работали. Хорошо бы его расковырять, и посмотреть, как сделали, но лень. Пользуюсь костылём

# setpci -s 00:02.0 F4.B=0xff

PS. Хорошо, что баг повесил.

d_a ★★★★★
()

В общем, как мне заставить работать регулировку яркости и, по возможности, включение / отключение беспроводных интерфейсов?

Повесил скрипт на переключения яркости через setpci на эти клавиши.

Deleted
()

Попробуй Samsung-tools. Это несколько модулей ядра для включения/выключения вайфая, бт, вебки, управления энергосбережением и подсветки + юзерспейс утилита для этого всего с биндингом на Fn клавиши. на моем самсунге Q45 все заработало как надо.

POLTER ★★
()
Ответ на: комментарий от carasin

В федоре не пробовал. Но там вроде проблема только в отсутствии rpm-ок. Можно попробовать собрать руками, модули-то dkms, должны заработать.

POLTER ★★
()
Ответ на: комментарий от POLTER

Оставлю этот вариант на крайний случай. Thnx.

carasin ★★★★★
() автор топика
Ответ на: комментарий от d_a

ОК. Я пока в скрипт вкуриваю. Оно как-то поприличнее будет, чем руками каждый раз в консоли ползать =D

carasin ★★★★★
() автор топика
Ответ на: комментарий от carasin

Оно как-то поприличнее будет, чем руками каждый раз в консоли ползать

Неа, это тоже костыль страшный.

На новых вёдрах же уже есть drivers/platform/x86/samsung-laptop.c, который выпрямляет ACPI backlight на самсунгах. Втыкай в него уж сразу лучше :)

У меня он не собирается, по причине энтерпрайзнутости дистрибутива, а на федоре может соберётся, а может уже и из коробки есть.

d_a ★★★★★
()
Ответ на: комментарий от d_a

Этот что ли?

$ sudo modprobe samsung-laptop 
FATAL: Error inserting samsung_laptop (/lib/modules/3.2.6-3.fc16.i686.PAE/kernel/drivers/platform/x86/samsung-laptop.ko): No such device
Также ставил из F14 пакетик с samsung-backlight'ом (модули ядра генерились akmod'ом) ― фэйлит с такой же ошибкой.

carasin ★★★★★
() автор топика
Ответ на: комментарий от aedeph

Уже советовали. Оно вроде как Ubuntu-only.

carasin ★★★★★
() автор топика
Ответ на: комментарий от d_a

И он же, кстати, не только за backlight, а ещё и за rfkill отвечает.

d_a ★★★★★
()

Это хорошо, что ты меня расшевелил. Бэкпортанул сейчас для проверки самый свежий samsung-laptop.c [1] на центос, заодно воткнув «поддержку» своего калькулятора.

--- samsung-laptop.c.orig	2012-02-23 19:23:43.468773600 +0400
+++ samsung-laptop.c	2012-02-23 19:24:35.157519516 +0400
@@ -447,7 +447,7 @@
 	return 0;
 }
 
-static const struct backlight_ops backlight_ops = {
+static struct backlight_ops backlight_ops = {
 	.get_brightness	= get_brightness,
 	.update_status	= update_status,
 };
@@ -549,6 +549,16 @@
 
 static struct dmi_system_id __initdata samsung_dmi_table[] = {
 	{
+		.ident = "N100",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR,
+					"SAMSUNG ELECTRONICS CO., LTD."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "N100"),
+			DMI_MATCH(DMI_BOARD_NAME, "N100"),
+		},
+		.callback = dmi_check_cb,
+	},
+	{
 		.ident = "N128",
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR,
@@ -805,7 +815,6 @@
 
 static int __init samsung_init(void)
 {
-	struct backlight_properties props;
 	struct sabi_retval sretval;
 	unsigned int ifaceP;
 	int i;
@@ -897,13 +906,13 @@
 		goto error_no_platform;
 
 	/* create a backlight device to talk to this one */
-	memset(&props, 0, sizeof(struct backlight_properties));
-	props.type = BACKLIGHT_PLATFORM;
-	props.max_brightness = sabi_config->max_brightness -
-				sabi_config->min_brightness;
 	backlight_device = backlight_device_register("samsung", &sdev->dev,
-						     NULL, &backlight_ops,
-						     &props);
+						     NULL, &backlight_ops);
+
+	backlight_device->props.max_brightness = sabi_config->max_brightness -
+				sabi_config->min_brightness;
+	backlight_force_update(backlight_device, BACKLIGHT_UPDATE_SYSFS);
+
 	if (IS_ERR(backlight_device))
 		goto error_no_backlight;
 

Настройка яркости и rfkill из юзерспейса теперь работают правильно. Правда, rfkill на кнопочку придётся вешать самому, а яркость на F2/F3 уже была настроена в Гноме.

1) http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=dr...

d_a ★★★★★
()
Ответ на: комментарий от d_a

Это, конечно, хорошо. Но мне от этого ни жарко, ни холодно.

Завтра на работе уделю чуточку времени для вкуривания изложенного выше скрипта. Пусть костыль, но если заведётся, то будет хорошо.

carasin ★★★★★
() автор топика
Ответ на: комментарий от carasin

Это, конечно, хорошо. Но мне от этого ни жарко, ни холодно.

Ты не понял. Там, где ты багу вешал, дожимай майнтейнеров своего дистрибутива (а ещё лучше сразу Грега КХ, или кто там у них этой подсистемой занимается) чтобы добавили поддержку твоего бука в модуль samsung-laptop. Патч для моего N100, например, как видишь, тривиальный. Если твой бук похож на модели из списка поддерживаемых, то патч будет такой же короткий - просто добавить соответствие в таблицу DMI match.

Если справишься - проблемы с такими машинами у всех закончатся, будет и яркость, и rfkill.

Ну или если тебе это неинтересно, или ты слишком занят для этого - тогда совсем другой вопрос.

d_a ★★★★★
()
Ответ на: комментарий от d_a

А... Понятно =D

Да, этот модуль писАл как раз Грег. Собираюсь ему на мыло отписАть, а то в моём баге (в списке адресов разрабов, на которые отправлено оповещение) конкретно его мыла нет.

carasin ★★★★★
() автор топика
Ответ на: комментарий от d_a

Всё, отправил Грегу письмецо. Правда, он не в RedHat'е трудится, а вовсе даже в Novell. В общем, посмотрим, что из этого выйдет.

carasin ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Точно! Чой-то я сам не догадался? =D Thnx.

Вроде дальше ничего менять не нужно?

carasin ★★★★★
() автор топика
Ответ на: комментарий от carasin

Он менее распространён, чем английский. Аудитория существенно сужается. К тому же, в наши дни просто необходимо знать английский в достаточной, для чтения подобных комментов, мере. Тем более, если пользуешься линуксом. А то тяжко иногда будет, сам пробовал, зависимость есть, гуф умер от етого.

LMD
()
Ответ на: комментарий от LMD

Ну, для международного взаимодействия оно, конечно, да, полезнее.

// Что-то пока не получается у меня завести этот скрипт.

carasin ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Что-либо ещё нужно прописывать? Например, acpi_backlight=vendor nomodeset в параметры ядра или ещё что?

carasin ★★★★★
() автор топика
Ответ на: комментарий от carasin

Что-либо ещё нужно прописывать? Например, acpi_backlight=vendor nomodeset в параметры ядра или ещё что?

Я ничего не прописывал.

Deleted
()
Ответ на: комментарий от Deleted

Просто у меня вот так:

$ lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation Device 1050 (rev a1)
$ sudo setpci -s 01:00.0 F4.B
00
$ sudo setpci -s 01:00.0 F4.B=50
$ sudo setpci -s 01:00.0 F4.B
00

carasin ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Хоть у меня и не вышло ничего со скриптом, видимо, из-за ядерной проблемы, но всё же хочу улучшить работу Вашего скрипта, коль скоро у Вас эта схема работает:

  1. Убираем из sudoers запись о позволении пользователю использовать sudo без пароля;
  2. Убираем из Вашего скрипта все упоминания о sudo и помещаем его в /etc/acpi/actions/, например, под именем brightness.sh;
  3. Создаём правила для событий ACPI:
    $ cat /etc/acpi/events/brightnessupconf 
    # Configuration to increase the display brightness level
    
    event=video/brightnessup.*
    action=/etc/acpi/actions/brightness.sh inc 10

    $ cat /etc/acpi/events/brightnessdownconf 
    # Configuration to decrease the display brightness level
    
    event=video/brightnessdown.*
    action=/etc/acpi/actions/brightness.sh dec 10

    $ cat /etc/acpi/events/brightnesstoggleconf 
    # Configuration to toggle the display brightness
    
    event=button/prog1.*
    action=/etc/acpi/actions/brightness.sh toggle

Иначе, если исполняем всё по Вашей схеме с sudo, то первым делом огребаем проблем с SELinux (если оно, конечно, есть и включено).

// Кстати, у меня почему-то так и не сохранялся уровень яркости в специально для этого созданном файле. Не могли бы Вы выложить скрипт в виде *.txt на какой-нибудь файлообменник (к примеру, тот же rghost.ru), а то с pastebin'ов как-то криво копируется (может, проблема ещё и в этом)?

carasin ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Кстати, ИМХО, файл с сохранённым параметром уровня яркости, наверное, лучше жёстко размещать где-нибудь в /run/, ибо tmpfs ==> операции производятся быстрее.

carasin ★★★★★
() автор топика

debasher@laptop:~$ cat ~/.up

#!/bin/bash

main=`cat ~/.savebrig`

let main=$main+10

sudo setpci -s 00:02.0 F4.B=$main

if [ $main != 100 ]

then echo -n $main > ~/.savebrig

fi

debasher@laptop:~$ cat ~/.down

#!/bin/bash

main=`cat ~/.savebrig`

echo «1= » $main

let main=$main-10

echo «2= » $main

sudo setpci -s 00:02.0 F4.B=$main

if [ $main != 0 ]

then echo -n $main > ~/.savebrig

fi

Поставь эти скрипты на хоткеи. И ещё sudoers надо будет пилить.

Debasher ★★★★★
()
Ответ на: комментарий от Deleted

OK. Всё равно у меня оно не пашет.

Но спасибо за скрипт.

carasin ★★★★★
() автор топика
Ответ на: комментарий от carasin

Ну если письмишко было без прикреплённого патча и подтверждения того, что этот патч хотя бы у тебя работает, скорее всего он его в /dev/null перешлёт :) Хотя, кто знает.

d_a ★★★★★
()
Ответ на: комментарий от d_a

Сначала пришло с его адреса письмо от мэйл-бота, типа, Грегу по этому адресу трудно достучаться, и если я хочу связаться с ним по поводу ядра Linux, то вот-те, пожалуста, адреса списков рассылки.

Собственно, списком рассылки я и воспользовался: перепостил первоначальное письмо с пометкой, дескать, связаться с Грегом не вышло (мэйл-бот так сказал), поэтому прошу уделить внимание таким образом. Вскоре пришло письмо уже от самого Грега: он люто недоумевал, почему я решил обратиться к разрабам именно таким образом и почему отпостил репорт в багзиллу красной шапки (сам-то он, ЕМНИП, из новелл), однако, Грег порекомендовал мне опробовать RC4 ядра 3.3.

В общем, я перед ним извинился за моветон (пообещав всё-таки попробовать 3.3), на что он снова мне ответил, типа, следует извиниться перед всеми адресатами списка рассылки, в который я первоначально отправил свой пост. Я именно так и поступил.

Видимо, в списке рассылки оказался также и сотрудник редхата (Джош Бойер), т.к. мне на почту пришёл репост их короткого диалога. Суть в том, что Джош сказал Грегу, почему он даёт совет использовать ядро 3.3rc4, ведь там в модуле samsung-laptop.c нет ничего касающегося новых моделей ноутов (в частности RV520). На что Грег ответил, что в этот модуль болше не будут вносить изменения специально под каждую samsung'овскую модель лаптопа, а должны были пропатчить его на предмет внесения универсального алгоритма для всех моделей. Также он дал ссылку на патч и добавил, что не знает наверняка о том, в какую конкретно версию ядра всё это добро попадёт (3.3 или 3.4). Сказал, что дальнейший «поиск истины» должен идти по направлению к «мейнтейнеру драйвера платформы» (platform driver maintainer) =D

В общем, если не бэкпортанут (а в этом я сильно сомневаюсь), то ждать ещё долго.

carasin ★★★★★
() автор топика
Ответ на: комментарий от carasin

В общем, не буду я больше писАть прямиком разрабам ― неправильно это. Есть багзилла, вот туда и путь дорога. Занавес.

carasin ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.