кто вызывает tty_open () в ядре Linux?

Используйте модуль subprocess, доступный на Python 2.4+, а не os.system(), поэтому вам не нужно иметь дело с экранированием оболочки.

import subprocess, os
if sys.platform.startswith('darwin'):
    subprocess.call(('open', filepath))
elif os.name == 'nt':
    os.startfile(filepath)
elif os.name == 'posix':
    subprocess.call(('xdg-open', filepath))

Двойные круглые скобки связаны с тем, что subprocess.call() хочет, чтобы в качестве первого аргумента была последовательность, поэтому мы используем кортеж здесь. В Linux-системах с Gnome есть также команда gnome-open, которая делает то же самое, но xdg-open является стандартом Free Desktop Foundation и работает в среде рабочего стола Linux.

0
задан Mark 16 January 2019 в 09:47
поделиться

3 ответа

Спасибо за номинальное животное за информацию.

Я отслеживаю Linux 2.0 ( https://mirrors.edge.kernel.org/pub/linux/kernel/v2.0/ ), возможно, дело немного в другом. Извините, я не могу найти сетевой источник Linux 2.0 для ссылки.

Для клавиатуры, в текстовом режиме, я думаю, что никто не вызывает 'open' в ядре. В 'int tty_init (void)' (tty_io.c) он будет вызывать 'kbd_init (); тогда мы можем видеть:

request_irq(KEYBOARD_IRQ, keyboard_interrupt, 0, "keyboard", NULL);

, поэтому клавиатура HW может работать с этим IRQ & amp; обратный вызов ('key_interrupt').

Для tty_open () я, наконец, вижу его в main.c

open("/dev/tty1",O_RDWR,0);

Для более новой версии ядра, я думаю, что эта часть перенесена в приложение getty, поэтому я не могу найти его в источник ядра.

0
ответ дан Mark 16 January 2019 в 09:47
поделиться

Когда я проверяю CentOS 7, только текстовый режим, в VirtualBox я не вижу X после выполнения lsof / dev / input / event2 (клавиатура), но моя клавиатура все еще работает

Это потому, что вы используете виртуальную консоль , а затем одно из /dev/ttyN устройств. Они напрямую связаны с подсистемой входных событий Linux внутри самого ядра (с помощью модуля vt); по существу, все клавиатурные устройства действуют как входы для активного в данный момент виртуального терминала.

Сам X использует виртуальную консоль, просто чтобы ядро ​​могло переключаться между ней и любыми текстовыми виртуальными консолями.

Как насчет tty_open()?

Если вы запустите sudo lsof /dev/tty[0-9], вы увидите, какие процессы обращаются к виртуальной консоли.

Процессы с getty в названии являются теми, которые предоставляют терминалы входа. (Те, которые используются с последовательными терминалами, очень похожи; на самом деле, многие программы getty могут нормально обрабатывать как виртуальные консоли, так и последовательные терминалы.) Когда вы входите в систему, этот getty запускает login (программа!), Которая, в свою очередь, запускает оболочку по умолчанию, определенную для этого пользователя (см. getent passwd username; это последнее поле, и оно должно быть тем, которое указано в /etc/shells, чтобы быть разрешенным).

Само ядро ​​поддерживает переключение на другую виртуальную консоль с помощью Ctrl + Alt + Fn (F1 для tty1, F2 для tty2 и скоро). Если вы используете подходящие графические драйверы, вы даже можете переключаться между Xorg и виртуальными консолями. (Обычно Xorg запускается на tty6 или tty7, но это зависит от дистрибутива.) Ctrl + Alt + и > Ctrl + Alt + также обычно можно использовать для переключения на предыдущую или следующую виртуальную консоль.

0
ответ дан Nominal Animal 16 January 2019 в 09:47
поделиться

tty_ * подпрограммы являются аппаратно-независимым кодом UNIX для реализации интерфейса терминала в ядре. Они отвечают за дисциплины tty, управление работой и обработку символов в линейном режиме (включая генерацию сигналов, например, на Ctrl-C). Они также реализуют интерфейс для пар tty / pty и т. П.

Это обычный код для включения всех общих функций драйверов терминала в любое оборудование, к которому вы можете подключиться (консольная клавиатура / дисплей - только один пример, но у вас есть, по крайней мере, интерфейсы uart RS-232C, USB последовательные ключи, последовательные мультиплексоры PCI и т. д.)

Функциональность терминала появилась в древней версии Unix v7 и имеет множество улучшений, связанных с BSD Unix (например, управление заданиями)

Кстати, linux реализация последовательного интерфейса не очень хороша, вам стоит посмотреть на реализацию BSD.

0
ответ дан Luis Colorado 16 January 2019 в 09:47
поделиться
Другие вопросы по тегам:

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