Системное администрирование и мониторинг Linux/Windows серверов и видео CDN
Статьи по настройке и администрированию Windows/Linux систем
Включение/выключение питания USB устройств из консоли
Иногда бывают ситуации, когда нужно отключить USB флешку, сделать настройку какой-то программы и потом опять подключить для нормальной работы. Но что делать если эти действия нужно сделать на удаленном сервере, к которому у нас нет физического доступа. Можно обратиться в службу поддержки, но можно и сделать все своими силами «не отходя от кассы». Расскажу как это делается.
Допустим, наша флешка уже втыкнута в USB-порт. Первым делом нужно проверить так ли это.
Как видим, USB-флешка находиться на шине Bus 001. Следовательно нам нужно найти в /sys/bus/usb/devices/ соответствующее USB устройство и выключить питание.
Чтобы копаться в системных устройствах нужны права суперпользователя.
По скольку мы знаем, что наша USB флешка на физической шине с номером 1. Следовательно, нужно отключить питание устройства 1-6, так как именно оно отвечает за первую шину.
Приведенная выше команда, отключит питание устройства на лету. Проверим теперь, так ли это.
Как видим — устройство отключено.
После внесения нужных изменений, подключаем питание USB устройства.
Как отключить порты USB, кроме клавиатуры и мыши?
Добрый день! Подскажите пожалуйста, как на компьютере с Linux отключить все USB порты, так, чтобы в них не было возможности вставлять съемные накопители и флешки, но можно было бы подключать клавиатуру и мышь?
Удалить все udev правила usb кроме мыши и клавиатуры. Но последний раз я копался в udev несколько лет назад и поэтому уже могло там многое поменяться.
в ядре отключить USB Storage, не?
в ядре отключить USB Storage, не?
А если например отключить монтирование дисков, кроме сетевых и локальных, указанных с fstab? Нужно сделать так, чтобы пользователи на предприятии не могли подключать флешки и прочие накопители к компу, но клавиатура и мышь и возможно штрих-сканер работали бы.
blacklist usb_storage >/etc/modprobe.conf.d/666.conf
перекомпиливаешь ядро, Device Drivers -> USB -> USB Storage, USB Storage убрать галочку. либо тут написано http://www.cyberciti.biz/faq/linux-disable-modprobe-loading-of-usb-storage-dr.
или blacklist usb-storage или как там этот модуль зовётся
в иксах отключить определение клав и мышей по идентификатору с identifier keyboard и option ignore on, создав конфиг в /etc/X11/xorg.conf.d/
чорд, я всё перепутал, сорри
У меня есть: /etc/modprobe.d/fbdev-blacklist.conf
Просто добавить в него «blacklist usb-storage»?
можно создать новый файл /etc/modprobe.d/usb-blacklist.conf
в файл прописать blacklist usb_storage сохранить и ребут
В современных DE автомонтированием подключаемых накопителей заведует udisks и consolekit / polkit. Поэтому вам нужно отредактировать политики consolekit / polkit, разрешающие монтирование подключаемых съёмных накопителей. В таком случае автомонтирование средствами udisks происходить не будет, а в случае, если пользователь нажмёт на иконку накопителя в файловом менеджере будет выведен запрос пароля root.
Если же вы используете для автомонтирования правила udev, например набор правил uam, то удалите их.
Можете рассказать поподробнее, как это делается, похоже это именно то, что мне нужно.
В /etc/polkit-1/rules.d/10-disable-mount.rules помещаете:
Это что, жаваскрипт?
Это синтаксис правил polkit.
Сишный это синтаксис.
В данном случае это синтаксис правил polkit, если вы напишете правило без соответствия синтаксису, то оно не будет распознано, без разницы на что синтаксис похож.
Нужно сделать так, чтобы пользователи на предприятии не могли подключать флешки и прочие накопители к компу, но клавиатура и мышь и возможно штрих-сканер работали бы.
Ну это проще. Всего то надо отредактировать /etc/group . Дело в том что обращаться к соответствующему демону для монтирования можно только если состоишь в определённой группе. Вроде как fuse, cdrom, floppy.
А нужные скрипты монтирования (сетевая шара или какой то специальный носитель) можно монтировать делегировав соответствующий скрипт через sudo
Отключение usb-storage, в общем случае не поможет.
Сканер-штрихкодов наверняка USB-COM и пользователь должен иметь доступ к этому порту, через COM-порт скачаю что угодно.
USB-HID (через который работают большинство клав и мышей) тоже довольно навороченный протокол.
Прочитать флешку можно и с помощью libusb (наверняка есть в системе).
В конце концов есть кнопка reset и загрузка с USB (во многих BIOS-ах выбор альтернативной загрузки не отключается).
Ещё /etc/group можно посмотреть на наличие юзера/группы в storage.
Что за дистр-то? А то тут долго голову можно ломать.
Debian 6. Но я уже сделал через /etc/modprobe.d/usb-blacklist.conf, как указал anonymous, и все вроде работает, во всяком случае я попробовал после этого подключить USB флешку и диск, и они не вызвали никакой видимой реакции системы, диски не подмонтировались.
Можно залить разъёмы эпоксидкой или повредить их. Можно в биосе отключить USB, а мышь и клаву использовать через ps/2. В случае hardened ядра в grsec есть возможность при сборке ведра включить опцию типа «не детектировать новые USB-устройства после старта ядра», т.е. с чем забутились, с тем и дальше работаем.
А если при апдейте ядра название модуля поменяется(usb_storage -> usb_mass_storage, например)? А если админ захочет флешку подключить(он, конечно, модуль ручками подгрузит, но голову поломает)? И вообще, слить инфу через USB можно и в обход USB Mass Storage(например, MTP).
Думаю, нужно рубить проблему на корню — не давать пользователю монтировать ФС и работать напрямую с блочными устройствами(dd if=
Но только появилась проблема — если USB-флешка была подключена до перезапуска, то она будет видна в системе и успешно примонтируется.
добавь в параметр ядра ‘nousb’. Хотя неуверен, что мышка с клавой будут работать.
disable a usb port in linux
I’ve searched a lot for an answer to this, but the closest I can get to finding a solution is this, but it doesn’t work for me.
The problem is this: one of my USB ports appears to be dead. Any program that tries to read «/sys/bus/usb/devices/usb1/descriptors» will cause the program to hang in an unkillable state.
Unfortunately, a lot of software seems to want to access USB1, including chrome and blender, which is why this is bugging me so much. When I invoke those programs with strace, they always hang at the moment they try to open «/sys/bus/usb/devices/usb1/descriptors».
I’ve tried things like «echo suspend > /sys/bus/usb/devices/usb1/power/level» but it’s no good — the command simply hangs like the others.
I tried using the hubpower code mentioned in the post linked above, but it likewise seems to just hang like the others.
I tried powering down the whole system and opening up the computer itself to disconnect the USB port directly, but the whole collection of USB ports (there are a lot of them) seem very tightly integrated with the motherboard, and I couldn’t see a way to unplug anything. Granted, I don’t have tons of experience plugging wires into and out of motherboards. If the only hope is to do it that way, I could hopefully manage it.
I tried going into the BIOS and disabling all the USB ports except one; and then disabling all except the next; and the next; and so on, to see which one was the problem. But it didn’t seem to have any effect — Linux still was able to recognize the ports well enough to use my USB mouse and keyboard. Linux didn’t seem to care what the BIOS configuration was.
The thing that occurs to me is that there may be some way to tell the Linux kernel to ignore USB1, but to do so without actually attempting to interact with USB1 (since that seems to cause the unkillable hang). But I don’t know how to do that.
Linux USB: включение и выключение питания?
Как программно включить и отключить питание определенного USB-порта в Linux? Возможно ли такое вообще? Ответы Mac также оценили!
Я пытался BOC (не притворяйтесь, что вы не пытались получить его тоже!) и закончил с одним из них, и хотел бы получить некоторую пользу от этой вещи, подключив ее к нашему монитору сервера.
13 ответов
Похоже, вам нужно подключить его к концентратору и контроль питания хаба. Ни один из корневых концентраторов, которые я видел, не может поддерживать управление питанием.
что-то типа: echo on > /sys/bus/usb/devices/usb5/power/level
возможно, Вам также придется играть с настройкой autosuspend. Не говоря ядру прекратить попытки, оно может автоматически приостановить работу порта.
взаимодействие usbfs, похоже, изменилось несколько раз, так как на этот вопрос был первоначально дан ответ. Итак, вот как я задействую питание порта концентратора на Ubuntu Oneiric Ocelot из оболочки Bash.
Поиск Шины и номер устройства:
найдите устройство в иерархии портов шины / концентратора, используя шину и номер устройства:
синтаксис, кажется, » автобусный порт.порт.порт.порт.порт. Например, мышь подключена к внешнему концентратор, который подключается к концентратору моего компьютера, который внутренне подключается к корневому концентратору:
Итак, — 2-1.1.1 в приведенном выше случае. Наконец, цикл питания порта:
Я не подключил анализатор протокола, чтобы увидеть, что на самом деле происходит в автобусе, но я знаю, что моя мышь выключается, когда я ее развязываю. Я предполагаю, что на нижнем уровне это взаимодействует с хост-контроллером EHCI, чтобы фактически отключить питание порта. Это особенно полезно для встраиваемых устройства, такие как веб-камеры UVC, которые никогда не функционируют должным образом и в противном случае потребуют перезагрузки системы для сброса.
вы могли бы использовать uhubctl — утилита командной строки для управления мощностью USB на порт для совместимых USB-концентраторов.
он работает только на концентраторах, которые поддерживают переключение питания на порт, но обратите внимание, что многие современные материнские платы имеют USB-концентраторы, которые поддерживают эту функцию. Кроме того, последняя версия uhubctl поддерживает концентраторы USB 3.0, и хорошей новостью является то, что довольно много новых концентраторов USB 3.0 поддерживают эту функцию.
для список состояния всех концентраторов и портов, которые могут управляться uhubctl:
для отключения питания на Порту 5 одного совместимого концентратора:
включить питание для всех портов всех совместимых концентраторов:
для выключения питания, а затем на:
раскрытие информации — я автор uhubctl.
это пример с беспроводной мышью Logitech USB под linux.
прочитайте соответствующий абзац «/ proc / bus / usb / devices «в соответствии с вашими устройствами «Vendor» (идентификатор поставщика) и «ProdID» (идентификатор продукта) или «производитель» и «продукт» (все эти значения постоянны для каждого устройства).
(первый абзац с устройством включен, второй с тем же устройством выключен, но все еще подключен)
здесь нужны две переменные. Они расположены в строка» T: «(первая строка абзаца). Эти переменные : Bus (Bus=01 в данном примере) Cnt (Cnt=01 в данном примере)
вам нужно будет добавить «1» (арифметический) в «Cnt», чтобы получить ранг Rank=Cnt+1 (это математическая функция, Rank=2 в данном примере)
таким образом, устройство, которое вы ищете, является следующей строкой : Bus-Rank (это не математическая функция, это строка, 1-2 в этом примере)
ум также «C:» линия. Он содержит информацию о мощности (токе) устройства. Если есть звездочка в «C: «(как в нашем 1-м примере), то устройство питается. Если нет («C:»), то устройство» более или менее » отключено, что означает, что всегда есть крошечный ток, когда устройство подключено, иначе мы не смогли бы прочитать всю эту информацию.
обратите внимание на строку «I:». Если поле «I:*» содержит звездочку (как в нашем 1-м примере) , то есть вход, от или к устройству, я не уверен, может быть, оба. Поле заключительная строка содержит используемый драйвер («usbhid» в нашем 1-м примере)
мы готовы включить питание устройства :
ниже приведен простой скрипт bash «USBMS» (USB Mouse Switch), который контролирует мощность устройства в нашем примере выше. Это не очень динамично, и он использует константы» продукт «и» производитель», чтобы найти соответствующий пункт «/proc / bus / usb / устройства» Вместо этого следует использовать «поставщик» (идентификатор поставщика) и «ProdID» (идентификатор продукта). Он также проверяет состояние питания устройства. Запуск от имени суперпользователя.
команда : ./ USBMS action
параметр: action = » off » или » 0 «для выключения питания-action =» on «или» 1 » для включения питания (без кавычек)
@Kristian обычно вы не найдете программное обеспечение, контролируемое портом, контролируемым питанием, потому что пользователи не должны осознавать этот уровень. Я не думаю, что есть много вариантов использования для него, кроме как заставить устройства с питанием от шины в известное состояние и обрабатывать тупые как почтовые устройства, которые используют только USB для питания. Возможно, устройство Марка относится ко второй категории. Это грубый механизм в крайнем случае.
Как я уже упоминал, я не рассматривал реализацию детали для разматывания взлома, и я только попробовал его на хост-контроллере EHCI, встроенном в мою материнскую плату, «Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller (rev 05).»Я бы предположил, что этот хост-контроллер имеет бит PPC набора HCSPARAMS, указывающий программное управление коммутаторами питания портов, согласно спецификации EHCI.
Если вы взаимодействуете с внешним концентратором, » концентратор указывает, поддерживает ли он переключение мощности установкой Логическое поле режима переключения мощности в wHubCharacteristics», согласно спецификации USB 2.0. Я не помню, обеспечивают ли тесты соответствия эту функциональность или нет, но если они это делают, вам нужно только найти концентратор с логотипом USB 2.0. Я предполагаю, что Хак отправит запрос функции set port, но он может задействовать больше, чем просто целевой порт. Опять же, в спецификации USB 2.0 » концентратор с выключателями питания может переключать питание на все порты как группа / Банда, на каждый порт по отдельности или иметь произвольный номер банд одного или нескольких портов.»Я не уверен, есть ли хороший инструмент командной строки для получения wHubCharacteristics.
короче говоря, насколько я знаю, нет большого общего способа справиться с этой проблемой. Однако можно опросить внутренний или внешний концентратор, чтобы определить его уровень поддержки, а затем, если поддерживается, использовать его. Вопрос только в том, сколько времени вы хотите потратить на это.
в OS X вы можете получить доступ к USB-устройству из пользовательского пространства и запросить его приостановку.
вы можете найти общий пример в руководство по интерфейсу USB-устройства. Вам нужно будет использовать IOUSBDeviceInterface182 (или выше) USBDeviceSuspend метод.
Примечание: концентраторы и порты контроллера могут иметь объединенные источники питания, что означает, что один и тот же коммутатор разделяется несколькими портами. если это так, и ваше устройство находится в одной группе как другое активное устройство, он не будет выключен.
» on » означает, что устройство должно быть возобновлено, а autosuspend-нет допустимый.(Конечно, системные приостановки все еще разрешены.)
«auto» — это нормальное состояние, в котором ядру разрешено autosuspend и автозапуск устройства.
«приостановить» означает, что устройство должно оставаться приостановлено, и autoresume не допускается. (Но удаленное пробуждение все еще может быть разрешено, в виду того что она проконтролирована separaely атрибут питания / пробуждения.)
Шаг 1: так что я, с USB1, USB2, с, с USB3, usb4 .
Шаг 2: как я узнаю, какой из них какой? (
Optional 1: в случае, если lsusb показывает и нужно найти конкретный
дополнительно 2: в случае, если никто не найден-перезагрузка не удается использовать цикл питания Arduino реле над udp
Arduino реле:
Я был бы более склонен отрезать провод и подключить его к последовательному порту с каким-то простым реле, работающим с одного из «готовых» штырей. Затем вы можете просто потянуть линию вниз (сигнал «Я готов к приему») в файл последовательного порта каждый раз, когда есть какая-то isssue. Когда это будет сделано, просто сигнал ‘я’
мое понимание этих вещей, однако, заключается в том, что они тянут много тока до полного заряда конденсатора, затем отпустите их все сразу прошить лампочка. Я не могу представить, что такой внезапный разряд хорош для схемы компьютера. для предотвращения обратной связи в последовательный порт может потребоваться несколько диодных ловушек тока.
каждый раз, когда мой будильник гаснет, компьютер выключается!
вы работаете просто » эхо » как root, попробуйте:
A несколько USB-концентраторов может включать и выключать свои порты, как описано в ссылке. Мне еще предстоит найти материнскую плату с USB-портами, которые можно включить или отключить.
Не покупайте дорогой смарт-концентратор только для включения и выключения USB-гаджетов.
Все, что вам нужно-это микроконтроллер.
Arduino Nano™ ATmega328 *
Nano — это 16mhz 8-битный компьютер с 2K RAM и 32K флэш-памяти.
Он имеет 22 программируемый контакты (8 аналоговых и 14 цифровых).
Может!—19—>читать/писать USB, и приведено в действие своим портом microUSB 5.0 V (до 12.0 V внешнего).
Изысканные крошечные случаи доступны (также бесплатно 3d печатные).
C4labs Зебра Черный Лед Чехол
* используйте только подлинный Arduino Nano™. Остерегайтесь подделки.
обновление: миниатюризации ATtiny и беспроводной интернет микроконтоллеры также доступный.
Как я понимаю, ваши устройства поставляются USB-линией питания VCC (
5V). Проблема в том, что эта линия питания не может управляться из пользовательского пространства в стандартной платформе linux, если вы не взаимодействуете с концентраторами, включенными с управлением питанием. Код ядра Ony может коснуться этой линии питания.