Перекарта включает GNOME3.8 с помощью xmodmap?

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-байтовый буфер в пространстве памяти приложения.

3
01.03.2017, 14:05
2 ответа

Определение источника команд во время входа в систему

Я не попробовал также .xinitrc или .xsession файлы, чтобы сделать это, но я сделал это с помощью пользовательского средства запуска, которое выполняется, когда я вхожу в систему. Можно получить доступ к диалоговому окну, которое позволяет Вам делать это несколько путей, я обычно просто запускаю его из командной строки как так.

$ gnome-session-properties

GUI похож на это.

                    ss of gnome session props

Отсюда можно создать собственные средства запуска запуска и затем указать на них на сценарии оболочки, которые содержат то, что когда-либо управляет, чтобы Вы вызвали. Здесь я создал свой собственный сценарий средства запуска 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, откроется соответствующей открытой папкой.

Почему .xsession или .xinit быть полученным не

Я полагаю, что окончательная проблема находится с этим сообщением, названным: Быстро Настраивая Потрясающий с Gnome. Это обсуждает методы для получения GDM (менеджер по оформлению GNOME) в загрузку этих файлов, чтобы мне подразумевает, что это не делает по умолчанию.

Моя система Fedora 19 содержит этот файл: /usr/share/xsessions/gnome.desktop который содержит эти строки:

Exec=gnome-session
TryExec=gnome-session
Icon=
Type=Application

Я полагаю, что сессия гнома не получает Ваш .xsession файл по умолчанию, и .xinit предназначен, чтобы быть полученным, если Вы вызываете использование GNOME startx.

Обязательно просмотрите названный раздел: с GDM, который показывает это более подробно.

Ссылки

1
27.01.2020, 21:28
  • 1
    Это - очень полезный инструмент, но я хочу сделать немного отличающуюся вещь. В Вашем случае Вы хотели запустить процесс, когда пользователь нажимает нажатия клавиш, я хочу, чтобы приложение получило другое нажатие клавиши, чем это было нажато. –  jb. 02.01.2014, 09:37
  • 2
    @jb. - Здесь я добавил метод, который я использую для команд выполнения, таких как Ваш xmodmap cmds., когда я вхожу в свой рабочий стол. спасибо –  slm♦ 02.01.2014, 10:16
  • 3
    Это решает проблему частично: первоначально работа ярлыков, но после перезапуска gnome-shell они исчезают. Я буду принимать его и ожидать фиксации ошибки замораживания оболочки гнома. большое спасибо –  jb. 02.01.2014, 10:28
  • 4
    @jb. - ах да, штопка, думал, что этому облизали проблему. –  slm♦ 02.01.2014, 10:28
  • 5
    @jb. - Я также переносил перезапуски оболочки гнома. Это начинает сходить с ума с использованием памяти, и я использую это для перезапуска его: pkill -HUP gnome-shell. Та Ваша проблема также? –  slm♦ 02.01.2014, 10:30

Если кто-то еще наткнется на это, это правильно обсуждается здесь:https://bugzilla.redhat.com/show_bug.cgi?id=873656

К сожалению, .xmodmapбольше не поддерживается и не будет поддерживаться Gnome 3.

Пользователи должны перенести свои конфигурации в xkb.

2
27.01.2020, 21:28

Теги

Похожие вопросы