Как получить фактическое устройство клавиатуры, учитывая вывод/proc/bus/input/devices?

Попробуйте mod_qos модуль Apache. Текущая версия имеет следующие механизмы управления.

  • Максимальное количество параллельных запросов к местоположению/ресурсу (URL) или виртуальный хост.
  • Ограничение пропускной способности, такой как максимальное позволенное количество запросов в секунду к URL или максимуму/минимуму загруженных кбайт в секунду.
  • Ограничивает количество событий запроса в секунду (специальные условия запроса). Это может также "обнаружить" высокопоставленных лиц (VIP), которые могут получить доступ к веб-серверу без или с меньшим количеством ограничений.
  • Универсальная строка запроса и заголовок фильтруют для отклонения несанкционированных операций.
  • Ограничение данных тела запроса и фильтрующий (требует mod_parp).
  • Ограничения на уровне соединения TCP, например, максимальное количество позволенных соединений от единственного адреса источника IP или динамического активного управления.
  • Предпочитает известные IP-адреса, когда сервер исчерпывает бесплатные соединения TCP.

Это демонстрационное условное правило из документации должно получить Вас идущий в правильном направлении.

# set the conditional variable to spider if detecting a
# "slurp" or "googlebot" search engine:
BrowserMatch             "slurp"                  QS_Cond=spider
BrowserMatch             "googlebot"              QS_Cond=spider

# limits the number of concurrent requests to two applications
# (/app/b and /app/c) to 300 but does not allow access by a "spider"
# if the number of concurrent requests exceeds the limit of 10:
QS_LocRequestLimitMatch       "^(/app/b/|/app/c/).*$"  300
QS_CondLocRequestLimitMatch   "^(/app/b/|/app/c/).*$"  10   spider

4
07.07.2013, 06:35
2 ответа

Посмотрите в своем выводе:

H: Handlers=[...] event7

Где event7 является устройством:

/dev/input/event7
2
27.01.2020, 21:00
  • 1
    Как я знаю который из sysrq, kbd, и event7 существующее устройство? (Я думаю с точки зрения автоматизированного сценария здесь.) –  Nathan Osman 07.07.2013, 08:56
  • 2
    Хм не убеждаясь быть честным. Все устройства в /dev/input кажется, называют eventX или mouseX таким образом, я использовал бы это. –  MLu 07.07.2013, 09:07

Для этой цели меня просто заставили написать парсер bash. Вот источник:

#!/bin/sh

inputDevicesInfoFilePath ()
{
    echo "/proc/bus/input/devices"
}


inputDevicesInfo ()
{
    cat $(inputDevicesInfoFilePath)
}

# arguments: device name, file line prefix
inputDeviceValue ()
{
    # constants
    local INFO_FILE=$(inputDevicesInfoFilePath)
    local NAME_PREFIX="N: Name="

    # name the function arguments
    local devName=$1
    local linePrefix=$2 

    # find the line number in the info file containing 
    # both the name prefix and device name argument 
    local lnNo=$(grep -n "${NAME_PREFIX}" ${INFO_FILE} | grep ${devName} | head -n1 | cut -d: -f1)

    # starting from the line number previously determined,
    # find the first line which contains the prefix argument
    # and extract the value token from that line
    local value=$(tail +${lnNo} ${INFO_FILE} | grep "${linePrefix}" | head -n1 | cut -d= -f2)

    # "return" the value via an echo  
    # if no value was found, don't echo anything 
    # but (literally) return an error code 
    if [ -z "${value}" ] ; then return 1; fi;
    echo ${value}
}

# arguments: device name
inputDevicePhys ()
{
    echo $(inputDeviceValue $1 "P: Phys=")
}

# arguments: device name
inputDeviceSysfs ()
{
    echo $(inputDeviceValue $1 "S: Sysfs=")
}

# arguments: device name
inputDeviceHandlers ()
{
    echo $(inputDeviceValue $1 "H: Handlers=")
}

# arguments: device name
inputDeviceEventHandlerPath ()
{
   # constants
    local INPUT_DEVICE_DIR_PATH="/dev/input/"

    # get the handlers for the device (as a space delimited list) 
    # if nothing is found return error code 1 and don't echo anything
    local handlers=$(inputDeviceHandlers $1)
    if [ -z "${handlers}" ] ; then return 1; fi;

    # interate through the list (splits on white space implictly)
    for handler in ${handlers}
    do
        # if the handler starts with "event", then echo the path 
        # and return from the function successfully 
        case ${handler} in event*)
            echo ${INPUT_DEVICE_DIR_PATH}${handler}  
            return
        esac
    done

    # if no event handler was found, don't echo anything 
    # but (literally) return an error code 
    return 1
}

Я превратил это в отдельный скрипт с именем input-device-info.shи поместил его в каталог /usr/bin(, который может быть или не быть «правильным» местом, но, похоже, это имело смысл в моем случае использования ).

Затем из другого сценария реализации клиентаЯ взял это и вызвал функцию inputDeviceEventHandlerPathвот так:

. /usr/bin/input-device-info.sh   

MY_DEVICE_PATH=$(inputDeviceEventHandlerPath "my-device-name")
echo 'MY_DEVICE_PATH:' ${MY_DEVICE_PATH}
0
27.01.2020, 21:00

Теги

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