ioctl переходит к драйверу, таким образом, самая важная вещь выяснить, что делает ioctl, - какой драйвер обрабатывает его.
О чем Вы читали type
, number
и data_type
конвенция, которую писатели драйвера, как предполагается, используют при выборе ioctl чисел. Хотя различные драйверы могут использовать то же значение для значения совершенно других вещей, лучше избегать этого, так, чтобы, если ioctl случайно отправляется на неправильное устройство, был хороший шанс, что это возвратит ошибку, а не вызовет некоторое катастрофическое событие.
Хорошее описание конвенции находится в книжных Драйверах устройств Linux (LDD), главе 6. data_type
на самом деле (с некоторого времени рано в 2.6.x серия IIRC) сделан из двух частей, direction
и size
.
type
(8 битов) являются константой, которая должна быть последовательной через ioctls, реализованный в драйвере, и должна отличаться от ioctls несвязанных устройств, если это возможно. Существует устаревший репозиторий type
значения в Documentation/ioctl/ioctl-number.txt
.number
(8 битов) должны отличаться для всего ioctls в драйвере.direction
(2 бита) указывают на направление передачи данных (0=none, 1=write, 2=read, 3=both).size
размер буфера данных, если ioctl аргументом является указатель на буфер данных.ioctl число должно быть
direction << 30 | size << 16 | type << 8 | number
(Если Вы пишете драйвер, используйте _IOC_*
макросы, определенные в asm-generic/ioctl.h
.)
Для Вашего ioctl номера 3222823425 = 0xc0186201, мы получаем type=0x62 (известный как “мост хоста bit3 vme” в 1999), number=1, direction=2 и size=0x18=24, таким образом, ioctl берет 24-байтовый входной параметр.
Это значение ioctl должно быть определено как _IOR(0x62, 0x01, struct somestruct)
или что-то эквивалентное как _IOR('b', 1, struct somestruct)
, где struct somestruct
24 байтовых структуры. Если Вы не знаете, какой драйвер обрабатывает ioctl, можно искать вызов как это в источнике ядра для сбора кандидатов. Однако обратите внимание, что простой текстовый поиск часто не будет находить драйвер, потому что им свойственно использовать макрос, например. #define FOOIO_TYPE 0x62
сопровождаемый #define FOOIO_SOMETHING _IOR(FOOIO_TYPE, 1, struct foobar)
.
Вызов ioctl имеет два параметра в дополнение к дескриптору файла, на который действует ioctl: ioctl число cmd
, и аргумент arg
. Аргументом может быть непосредственное значение или указатель на буфер. Здесь, если устройство записи драйвера следует конвенции, arg
должен быть указатель на 24-байтовый буфер в пространстве памяти приложения.
Я не попробовал также .xinitrc
или .xsession
файлы, чтобы сделать это, но я сделал это с помощью пользовательского средства запуска, которое выполняется, когда я вхожу в систему. Можно получить доступ к диалоговому окну, которое позволяет Вам делать это несколько путей, я обычно просто запускаю его из командной строки как так.
$ gnome-session-properties
GUI похож на это.
Отсюда можно создать собственные средства запуска запуска и затем указать на них на сценарии оболочки, которые содержат то, что когда-либо управляет, чтобы Вы вызвали. Здесь я создал свой собственный сценарий средства запуска Dropbox, который выполняется, когда я вхожу в систему.
Если, с другой стороны, Вы надеетесь создавать комбинации сочетания клавиш, которые запустят команды, я успешно использовал XBindKeys на GNOME 3.8.4 для этой самой цели.
Мое использование было скромно, но мне нравится создавать сочетания клавиш для Наутилуса для запуска с определенными открытыми каталогами.
Вы должны будете сначала удостовериться пакеты xbindkeys
установлен.
Затем необходимо будет выполнить следующую команду, только один раз, для создания шаблона xbindkeys
конфигурационный файл.
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
С файлом, созданным, можно открыть его в текстовом редакторе и добавить правило как это:
"nautilus --browser /home/saml/projects/path/to/some/dir"
Mod4+shift + q
С вышеупомянутым изменением, внесенным, мы должны уничтожить xbindkeys
если это уже работает, и затем перезапустите его.
$ killall xbindkeys
$ xbindkeys
Теперь с этим выполнением любого времени я ввожу Наутилус Mod+Shift+Q, откроется соответствующей открытой папкой.
Я полагаю, что окончательная проблема находится с этим сообщением, названным: Быстро Настраивая Потрясающий с Gnome. Это обсуждает методы для получения GDM (менеджер по оформлению GNOME) в загрузку этих файлов, чтобы мне подразумевает, что это не делает по умолчанию.
Моя система Fedora 19 содержит этот файл: /usr/share/xsessions/gnome.desktop
который содержит эти строки:
Exec=gnome-session
TryExec=gnome-session
Icon=
Type=Application
Я полагаю, что сессия гнома не получает Ваш .xsession
файл по умолчанию, и .xinit
предназначен, чтобы быть полученным, если Вы вызываете использование GNOME startx
.
Обязательно просмотрите названный раздел: с GDM, который показывает это более подробно.
Если кто-то еще наткнется на это, это правильно обсуждается здесь:https://bugzilla.redhat.com/show_bug.cgi?id=873656
К сожалению, .xmodmap
больше не поддерживается и не будет поддерживаться Gnome 3.
Пользователи должны перенести свои конфигурации в xkb
.
xmodmap
cmds., когда я вхожу в свой рабочий стол. спасибо – slm♦ 02.01.2014, 10:16gnome-shell
они исчезают. Я буду принимать его и ожидать фиксации ошибки замораживания оболочки гнома. большое спасибо – jb. 02.01.2014, 10:28pkill -HUP gnome-shell
. Та Ваша проблема также? – slm♦ 02.01.2014, 10:30