LINUX.ORG.RU

Файл, создаваемый при подключении устройства 3,5

 ,


0

1

Добрый вечер, при подключении usb мышки по пути /dev/input/by-path/ создается файл pci-0000:00:15.0-usb-0:1:1.0-mouse. Вопрос - есть ли подобный файл, который создается при подключении наушников в разъем 3,5 мм? Мой neofetch, если нужен: OS: Linux Mint 21.2 x86_64 .: Host: Aspire A315-34 V1.06 Kernel: 5.15.0-84-generic ` Uptime: 43 mins Packages: 2865 (dpkg) Shell: bash 5.1.16 Resolution: 1366x768 DE: GNOME 42.9 WM: Mutter . WM Theme: Mint-Y Theme: Mint-Y-Aqua [GTK2/3] Icons: Mint-Y-Sand [GTK2/3] Terminal: gnome-terminal CPU: Intel Pentium Silver N5000 (4)
GPU: Intel GeminiLake [UHD Graphics
Memory: 1505MiB / 371


Нет, такого файла нет.

Причина в том, что мышь — цифровое устройство, с которого идет цифровой ввод-вывод.

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

Vsevolod-linuxoid ★★★★★
()

Что от этого гипотетического файла нужно? Если само событие подключения, то для HD-Audio чипов в ядре создаются устройства ввода, генерящие соответствующие эвенты, типа таких:

Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: "HD-Audio Generic Front Headphone"
Supported events:
  Event type 0 (EV_SYN)
  Event type 5 (EV_SW)
    Event code 2 (SW_HEADPHONE_INSERT) state 0
Properties:
Testing ... (interrupt to exit)
Event: time 1700413373.117736, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 1
Event: time 1700413373.117736, -------------- SYN_REPORT ------------
Event: time 1700413377.597896, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 0
Event: time 1700413377.597896, -------------- SYN_REPORT ------------

Эти эвенты можно чем-нибудь обрабатывать.

alegz ★★★★
()
Последнее исправление: alegz (всего исправлений: 1)
Ответ на: комментарий от alegz

Немного не то, что мне нужно, но все же спасибо. Мне нужен как таковая папка и/или файл создающийся при подключении устройства в разъем 3,5 мм. Нужно мне это для скрипта, выполняющий следующее: if os.path.exists(‘/dev/input/by-path/pci-0000:00:15.0-usb-0:1:1.0-mouse’): действие 1 действие 2 и тд. Не столь важно.

Vafls
() автор топика

Для HDA, состояния пина можно узнать через ioctl():

import ctypes, fcntl, os

def hda_jack_sense(dev_file, pin_id):
    '''
    Senses HDA audio device pin (e.g. jack plug) by its id.
    Returns True if jack is inserted, False otherwise.
        dev_file    - audio device file name, e.g. "/dev/snd/hwC0D0"
        pin_id      - id of an audio pin (could be obtained from
                      hdajacksensetest utility from alsa-tools)
    ! The function must be run with CAP_SYS_ADMIN privileges.
    '''
    HDA_IOCTL_VERB_WRITE = 0xc0084811
    AC_VERB_GET_PIN_SENSE = 0x0f09
    verb = (pin_id << 24) | (AC_VERB_GET_PIN_SENSE << 8)
    arg = (ctypes.c_uint * 2)(verb)
    with open(dev_file, 'wb') as f:
        fcntl.ioctl(f.fileno(), HDA_IOCTL_VERB_WRITE, arg)
    return bool(arg[1] & 0x80000000)

headphone_pin_id = 0x1b
sense = hda_jack_sense("/dev/snd/hwC1D0", headphone_pin_id)
print(sense)

/dev/snd/hwC1D0 - файл устройства (D) 0 карты (C) 1. Посмотреть список карт с их номерами - cat /proc/asound/cards. Номер устройства - ls -1 /proc/asound/card?/codec*, но, скорее всего, он будет именно 0. headphone_pin_id - grep '^Node.*Pin' -A1 '/proc/asound/card1/codec#0' - число сразу после «Node», выше строки, содержащей «Headphone».

Вызов ioctl() и открытие файла устройства требуют прав суперпользователя.

$ sudo python hda_pin_sense.py    # наушники подключены
True

$ sudo python hda_pin_sense.py    # наушники не подключены
False

В состав пакета alsa-tools входит утилита hdajacksensetest, которая также выводит состояние пинов аудиоинтерфейса. На основе этой утилиты и была написана функция на питоне.

anonymous
()