ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: sisyphus@lists.altlinux.org
Subject: Re: [sisyphus] Кнопки Power
Date: Wed, 2 Jun 2010 18:23:11 +0400
Message-ID: <20100602142311.GC4149@newmaster.mivlgu.local> (raw)
In-Reply-To: <20100602103903.GU5608@wrars-comp.wrarsdomain>

[-- Attachment #1: Type: text/plain, Size: 5788 bytes --]

On Wed, Jun 02, 2010 at 04:39:03PM +0600, Andrey Rahmatullin wrote:
> On Wed, Jun 02, 2010 at 01:46:29PM +0400, George V. Kouryachy wrote:
> > >> 2. Кто при нажатии кнопки на клавиатуре посылает ACPI-сообщение? 
> > > Понятия не имею; у меня она шлёт 124/XF86Poweroff, но acpid, оказывается,
> > > теперь на это тоже реагирует. Не исключаю, что иксы тут вообще ни при чём.
> > Вот в этом месте я хотел бы разобраться:
> Вообще я не уверен, что это именно acpid, а не кто-то другой дёргает,
> скажем, pm-hibernate.
> 
> > acpi-событие происходит потому, что его генерит acpid, или оно
> > происходит ещё почему-нибудь, а acpid его только ловит?
> acpid ничего не генерит, он слушает /proc/acpi/event и netlink.

Уже не только /proc/acpi/event и netlink - сейчас acpid действительно
открывает все устройства /dev/input/event* и обрабатывает полученные
оттуда события, переводя их внутри в события ACPI; список
обрабатываемых кодов можно получить только путём RTFS input_layer.c:

/* Event Table: Events we are interested in and their strings.  Use 
   evtest.c, acpi_genl, or kacpimon to find new events to add to this
   table. */
static struct evtab_entry evtab[] = {
	{{{0,0}, EV_KEY, KEY_POWER, 1}, "button/power PBTN 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_SUSPEND, 1}, 
 		"button/suspend SUSP 00000080 00000000"},
	{{{0,0}, EV_SW, SW_LID, 1}, "button/lid LID close"},
	{{{0,0}, EV_SW, SW_LID, 0}, "button/lid LID open"},
	/* blue access IBM button on Thinkpad T42p*/
	{{{0,0}, EV_KEY, KEY_PROG1, 1}, "button/prog1 PROG1 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_VENDOR, 1}, "button/vendor VNDR 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_FN_F1, 1}, "button/fnf1 FNF1 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_FN_F2, 1}, "button/fnf2 FNF2 00000080 00000000"},
	/* Fn-F2 produces KEY_BATTERY on Thinkpad T42p */
	{{{0,0}, EV_KEY, KEY_BATTERY, 1}, 
 		"button/battery BAT 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_SCREENLOCK, 1}, 
 		"button/screenlock SCRNLCK 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_COFFEE, 1}, "button/coffee CFEE 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_SLEEP, 1}, "button/sleep SBTN 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_WLAN, 1}, "button/wlan WLAN 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_FN_F6, 1}, "button/fnf6 FNF6 00000080 00000000"},
	/* procfs on Thinkpad 600X reports "video VID0 00000080 00000000" */
	/* typical events file has "video.* 00000080" */
	{{{0,0}, EV_KEY, KEY_SWITCHVIDEOMODE, 1}, 
		"video/switchmode VMOD 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_FN_F9, 1}, "button/fnf9 FNF9 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_FN_F10, 1}, "button/fnf10 FF10 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_FN_F11, 1}, "button/fnf11 FF11 00000080 00000000"},
	/* Fn-F9 produces KEY_F24 on Thinkpad T42p */
	{{{0,0}, EV_KEY, KEY_F24, 1}, "button/f24 F24 00000080 00000000"},

#if 0
	/* These "EV_MSC, 4, x" events cause trouble.  They are triggered */
	/* by unexpected keys on the keyboard.  */
	/* The 4 is MSC_SCAN, so these are actually scan code events.  */

	/* EV_MSC, MSC_SCAN, KEY_MINUS  This is triggered by the minus key. */
	{{{0,0}, EV_MSC, 4, 12}, "button/fnbs FNBS 00000080 00000000"},

	/* EV_MSC, MSC_SCAN, KEY_EQUAL  Triggered by the equals key. */
	{{{0,0}, EV_MSC, 4, 13}, "button/fnins FNINS 00000080 00000000"},

	/* EV_MSC, MSC_SCAN, KEY_BACKSPACE   Triggered by the backspace key. */
	{{{0,0}, EV_MSC, 4, 14}, "button/fndel FNDEL 00000080 00000000"},

	/* EV_MSC, MSC_SCAN, KEY_E   Triggered by the 'E' key. */
	{{{0,0}, EV_MSC, 4, 18}, "button/fnpgdown FNPGDOWN 00000080 00000000"},
#endif

	{{{0,0}, EV_KEY, KEY_ZOOM, 1}, "button/zoom ZOOM 00000080 00000000"},
	/* typical events file has "video.* 00000087" */
	{{{0,0}, EV_KEY, KEY_BRIGHTNESSDOWN, 1}, 
 		"video/brightnessdown BRTDN 00000087 00000000"},
 	/* typical events file has "video.* 00000086" */
	{{{0,0}, EV_KEY, KEY_BRIGHTNESSUP, 1}, 
 		"video/brightnessup BRTUP 00000086 00000000"},
	{{{0,0}, EV_KEY, KEY_KBDILLUMTOGGLE, 1}, 
 		"button/kbdillumtoggle KBILLUM 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_VOLUMEDOWN, 1}, 
 		"button/volumedown VOLDN 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_VOLUMEUP, 1}, 
 		"button/volumeup VOLUP 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_MUTE, 1}, 
 		"button/mute MUTE 00000080 00000000"},
 	/* additional events divined from the kernel's video.c */
	{{{0,0}, EV_KEY, KEY_VIDEO_NEXT, 1}, 
 		"video/next NEXT 00000083 00000000"},
	{{{0,0}, EV_KEY, KEY_VIDEO_PREV, 1}, 
 		"video/prev PREV 00000084 00000000"},
	{{{0,0}, EV_KEY, KEY_BRIGHTNESS_CYCLE, 1}, 
 		"video/brightnesscycle BCYC 00000085 00000000"},
	{{{0,0}, EV_KEY, KEY_BRIGHTNESS_ZERO, 1}, 
 		"video/brightnesszero BZRO 00000088 00000000"},
	{{{0,0}, EV_KEY, KEY_DISPLAY_OFF, 1}, 
 		"video/displayoff DOFF 00000089 00000000"}
};

Таблица событий не настраивается, список устройств - тоже (всегда
открываются все доступные устройства, причём даже обрабатывается
подключение новых устройств после запуска acpid), вызов open_input()
выполняется всегда при использовании опции -n (либо даже без неё, если
не обнаружен /proc/acpi/event), а опция -n прибита гвоздями в скрипте
запуске /etc/init.d/acpid.

Таким образом, чтобы кнопка Power на клавиатуре не обрабатывалась
acpid, теперь придётся назначать ей код, отличающийся от KEY_POWER и
других кодов, обрабатываемых acpid (например, с помощью setkeycodes,
или через ioctl EVIOCSKEYCODE для отдельного устройства
/dev/input/event*).

Правда, при активном X-сервере acpid по идее не должен получать
события из /dev/input/event*, поскольку X использует ioctl EVIOCGRAB
для монопольного использования устройств ввода, и в этом состоянии до
других клиентов события ввода доходить не должны.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2010-06-02 14:23 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-28 14:38 George V. Kouryachy
2010-05-29  9:49 ` Andrey Rahmatullin
2010-06-02  9:46   ` George V. Kouryachy
2010-06-02 10:39     ` Andrey Rahmatullin
2010-06-02 14:23       ` Sergey Vlasov [this message]
2010-06-03  7:05 ` Sergei Epiphanov
2010-06-21 13:32   ` Michael Shigorin
2010-06-22  6:19     ` Sergei Epiphanov
2010-06-23  8:59     ` Sergei Epiphanov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100602142311.GC4149@newmaster.mivlgu.local \
    --to=vsu@altlinux.ru \
    --cc=sisyphus@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git