Python отключить usb устройство

Обновлено: 06.07.2024

Приветствую!

Отключение USB портов может понадобиться в самых различных целях и сценариях. Одной из наиболее часто встречающихся причин отключения ЮСБ порта или портов можно назвать предотвращение «утечки» каких-либо важных и конфиденциальных данных с компьютера. Также стоит отметить и безопасность (зловредное программное обеспечение, вирусы никто не отменял), которая повышается, если отключить возможность подключения каких-либо съёмных накопителей (флеш-дисков, портативных HDD и иных устройств, имеющих интерфейс USB).

Мы рассмотрим множество актуальных способов, которые позволят ограничить использование USB портов на стационарном компьютере или ноутбуке.

Содержание:

Управление работой USB через BIOS

Этот способ позволяет эффективно отключить работу всех USB портов на компьютере или ноутбуке. Однако стоит учесть, что при этом будет отключена работа периферии, что подключена к USB портам. И если у вас подключена клавиатура с мышкой через USB порт, то при использовании данного способа оные перестанут работать.

Найдя их, следует воспользоваться переключателем напротив и выбрать пункт Disabled (Отключить).

На изображении ниже показано, как это может примерно выглядеть.

Выключаем или включаем USB через групповую политику

Данный способ хорош тем, что отключается возможность работы с подключаемыми съёмными носителями через USB, однако периферия при этом не затрагивается. Если у вас подключён принтер, клавиатура, мышка и т.д., то оные так и будут продолжать работать после проведённой манипуляции.

    Для открытия окна групповой политики воспользуемся комбинацией клавиш Win + R. Нажав оную, будет выведено окно, в которое следует вписать «gpedit.msc» (без кавычек) и далее нажать по кнопке OK.

Отключение или включение USB через реестр

Как и предыдущий способ, оный так же не затрагивает работу периферии. Отключается только возможность работы со съёмными накопителями.

Следует отметить, что если вы ранее не сталкивались с реестром, ничего там не редактировали, то следует на всякий случай сделать его резервную копию. Это окажет посильную помощь, если что-то будет сделано неверно, и операционная система начнёт проявлять нестабильность в работе.
  1. Следует открыть редактор реестра. Для этого существует несколько способов, одним из которых является следующий: нажав на клавиатуре комбинацию клавиш Win + R, следует далее в открывшемся окошке ввести команду «regedit» (без кавычек) и нажать OK.

И далее в правой части окна следует осуществить двойной клик мышкой по пункту с именем Start.

Отключение работы USB портов со съёмными накопителями

Надстройка управления доступом к USB с использованием программ

Существует целый ряд программ, ограничивающих работу для подключаемых USB носителей данных.

Среди таковых можно отметить: USB Block, USB Disabler Pro, MyUSBOnly, Gilisoft USB Lock. Всё они обладают англоязычным интерфейсом, возможностью настройки «белого списка» подключаемых накопителей и некоторыми другими возможностями.

Программы и утилиты, позволяющие управлять работой USB портов, ограничивать и разрешать подключение к ним устройств

Приведённые решения не являются бесплатными, но если необходимо ограничить доступ к USB на компьютерах в организации, то данный вариант можно рассмотреть.

Управление работой USB портов через диспетчер устройств

Данный способ не является универсальным, всё зависит от аппаратной реализации конкретного USB контроллера, что установлен в компьютер или ноутбук. В некоторых случаях даже после отключения всех указанных пунктов, работа того или иного USB порта может сохраняться.

И да, отключение USB таким способом приведёт и к отключению работы подключенной периферии (мышка, клавиатура, принтер и т.д.). Будьте внимательны.

  1. Откройте Диспетчер устройств. Более подробно о том, как это сделать, написано в материале «Открываем диспетчер устройств в Windows (7, 8, 10)».
  2. В открывшемся окне следует кликнуть по пункту с именем Контроллеры USB, дабы он был развёрнут.

В данном списке отобразятся аппаратные элементы, отвечающие за работу USB. Наведите мышку, кликните правой клавишей и в отобразившемся меню выберите Отключить устройство.

Отключаем ЮСБ через диспетчер устройств

Аппаратное отключение USB

В данном случае речь идёт об отключении USB кабеля на материнской плате, который отвечает за подключение USB портов на лицевой стороне системного блока.

Порты USB на лицевой панели ПК подключены к материнской плате через шлейф

USB порты сзади, которые непосредственно размещены на материнской плате, отключить таким способом, естественно, не получится.

То же касается и ноутбуков.

Деинсталляция драйвера USB для отключения работы

Данный способ не является рациональным. Это связанно с тем, что впоследствии операционная система восстанавливает удалённые драйвера (обычно после перезагрузки компьютера), т.к. видит, что физически компонент в системе присутствует.

Более того, если удалить драйвер, то нарушается работа всех подключенных USB устройств.

Мы рады, что смогли помочь Вам в решении поставленной задачи или проблемы.

В свою очередь, Вы тоже можете нам очень помочь.

Просто поделитесь статьей в социальных сетях и мессенджерах с друзьями.

Поделившись результатами труда автора, вы окажете неоценимую помощь как ему самому, так и сайту в целом. Спасибо!


Это мой первый пост, и я вроде как видел, что чем более конкретным, тем лучше, поэтому я постараюсь быть предельно ясным и заблаговременно!

Что я хочу:
Мне нужно сканировать изображения с двух или более сканеров одновременно, эти сканеры имеют один и тот же бренд и модель, в этом случае Epson Perfection V600 мне нужны разные интервалы времени не менее 40 снимков в течение 20 часов.

Мой подход
Я решил использовать Windows, у меня уже есть программа на Python, которая делает то, что я хочу, только с одним сканером или с двумя из разных моделей. Но вот где вы, ребята, приходите:

Эта проблема
Windows всегда печатает с помощью одного и того же сканера. Поскольку они принадлежат к одному бренду и модели, он всегда использует один и тот же, и я не могу использовать два разных сканера, потому что это приведет к тому, что изображения не будут сопоставимы. Тем не менее, когда я использую два разных сканера, у меня нет такой проблемы. Мне нужно найти способ печати с каждым сканером. Я думал, что покупаю USB-концентратор и контролирую его с помощью python, но, по-видимому, благодаря внедрению libsub в Windows, я не смогу его контролировать. Поэтому я сейчас ищу способ отключить определенный USB-порт, чтобы программа распознавала только одно устройство, сканировала его, отключила его, снова включила и т.д.

У меня есть доступ к:

    В настоящее время я использую Windows 10, 64 бита, ядро python 3 в версии python 3.5 внутри среды Conda, версию conda (4.5.11). Ubuntu 16.04, 64 бит, работающий с pyinsane, в среде python 3.5 внутри conda (у вас нет версии conda). Одно совершенство Epson V600. Два Canon Lide200, работающие только в окнах, потому что драйверы недоступны в Ubuntu.

То, что я также пробовал

    Используя Ubuntu,
    Я думал, что это хорошая идея, но веб-страница драйверов Epson не может подключиться к репозиторию, содержащему остальные файлы Epson, позволяя мне частично загружать файлы, я уже пытался связаться с владельцем репозитория Docky, но он не работает связаться со мной.
    Ошибка:

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

Использование Windows

Я думал, что покупаю USB-концентратор и контролирую, как показано в этой ветке, но, видимо, это невозможно в окнах.

Я уже установил libsub, usb.util, libusb1, USB (для основных функций) и usb1, но я не знаю (я думаю, это невозможно) отключить и снова включить с ними определенный порт USB.

Невозможно отключить драйверы, поскольку это означает, что все USB-устройства будут подключены к сканерам.

Диспетчер устройств не помогает, из-за неспособности сказать, какое именно устройство.

Невозможно изменить имя сканера (да, у принтеров могут быть определенные имена), но сканеры не могут.

Не могу купить еще один сканер, я застрял с Epson.

Мой код для сканирования

Я помещал записку с записью внутри каждого сканера, один с "а", другой с "b", и он всегда сканирует сканер, который я подключил первым

**This is what I

Это то, что я хотел бы сделать (и делать это вручную): .

Это то, что я получаю при попытке в python:

This is what I get

Любое решение поможет мне, проявите творческий подход! Я думал об использовании.bat файла для отключения определенного порта и вызова его с помощью Python. Но я не мог найти способ сделать это. Имейте в виду, что делать это вручную не является вариантом для 20-40 часов непрерывного захвата изображений.
Спасибо!

Из-за потребностей проекта данные пикселей изображения на стороне FPGA должны быть переданы на сторону ПК через протокол USB2.0, поэтому для отправки и получения данных необходима библиотека python pyusb. Ниже описаны методы и проблемы, возникающие при использовании библиотеки pyusb.

1. Введение интерфейса USB

В этом процессе разработки я использовал чип-драйвер Cypress EZ-USB серии CY7C68013A для передачи данных USB на плате разработки FPGA. CY7C68013A - это высокоскоростной протокол связи USB2.0 и совместимый чип управления 8051 В этом чипе содержится 16 КБ встроенной оперативной памяти, вы можете напрямую запустить программу прошивки без дополнительной памяти. Рабочая частота внутреннего 8051 процессора CY7C68013A может составлять 48 МГц, 24 МГц, 12 МГц. На моей плате разработки FPGA 24 МГц используется как вход тактовой частоты. CY7C68013A объединяет 4 FIFO с общим размером 4 Кбайт. Пользователь может настроить его для работы в режиме Master или Slave путем установки. CY7C68013A содержит интерфейс I2C для подключения к внешней EEPROM.Первый пользователь загружает записанный файл микропрограммы .iic в EEPROM. При включении CY7C68013A он автоматически считывает программу EEPROM во внутреннюю память для запуска.
Микросхема CY7C68013A, используемая в этом проекте, настраивает программу встроенного программного обеспечения для работы в ведомом режиме асинхронного чтения-записи FIFO, в котором FIFO EP2 и EP4 задается в качестве порта вывода данных, а FIFO EP6 и EP8. Для порта ввода данных каждый порт содержит два 512-байтовых FIFO.Если 512-байтовый порт считывается пустым или полным, оборудование автоматически переключится на другой 512-байтовый FIFO. На этом внедрение USB-оборудования заканчивается, и если вам нужно изменить режим работы CY7C68013A, конфигурацию портов и сигналов, вы можете узнать больше о программе прошивки CY7C68013A и изменить ее.

2. Установка драйвера USB

Вотссылка на сайтЗагрузите библиотеку libusb.

Дважды щелкните по установке, выберите соответствующий интерфейс USB, установите и создайте папку LibUSB-Win32 (следующий путь не будет отображен)

В каталоге bin в папке LibUSB-Win32 щелкните inf-wizard, чтобы установить драйвер, сгенерировать информацию о драйвере USB и сохранить ее в любом каталоге.


Выберите интерфейс USB для установки в диспетчере устройств, выберите для обновления драйвера, перейдите в каталог только что сгенерированной информации о драйвере USB, начните обновлять драйвер и завершите установку драйвера.


Запишите идентификатор поставщика и идентификатор продукта в информации о драйвере

В-третьих, установка библиотеки pyusb

Здесь нечего уточнять, cmd запускается напрямую

В-четвертых, развитие pyusb

Создайте новый проект Python, импортируйте необходимую библиотеку USB, код выглядит следующим образом


Где idVendor = 0x04B4, idProduct = 0x1004, заменяется идентификатором Vender и идентификатором продукта USB-драйвера, который вы только что установили
При запуске программы будет распечатана соответствующая информация об интерфейсе USB.

Затем читайте и пишите USB, код выглядит следующим образом

Параметры функций чтения и записи в вышеупомянутом модуле чтения-записи соответственно отмечаются впоследствии,Пожалуйста, измените это самостоятельно
Запустите модуль чтения и записи отдельно, чтобы проверить USB-чтение и запись. Обратите внимание, что из-за характеристик USB-чипа на плате разработки FPGA, которую я использую, емкость четырех FIFO-дисков составляет 512 байт, поэтому длина одного чтения установлена ​​в модуле чтения моего главного компьютера. Это 512 байт. Если он меньше 512 байт, это приведет к проблеме невозможности чтения данных. Он также соответствует модулю записи (записи). Также необходимо записать полные 512 байт, прежде чем сторона ПЛИС получит прошлые данные, отправленные ПК. ,
На этом этапе разработка USB с использованием библиотеки pyusb python даже завершена, поскольку в этом проекте используется базовая функция приемопередатчика USB, программа относительно проста. Для более глубокого развития, пожалуйста, сделайте дальнейшее развитие самостоятельно.

Общение с USB-устройством должно быть простым через PyUSB. Итак, пытаюсь читать с USB-устройства (осциллографа) с помощью PyUSB под Win10. Судя по всему, USB-драйвер (libusb-win32 v1.2.6.0) установлен правильно, так как устройство найдено, и я получаю ответ от print(dev) (Смотри ниже). Из этого я вижу, что адрес конечной точки вывода 0x3 а адрес входной конечной точки 0x81

Если я отправлю *IDN? Я должен получить ответ ,P1337,1842237,V2.4.0-> . Но только если устройство уже находится в SCPI-режиме. По-видимому, это не так, и я получаю ошибку тайм-аута (см. Ниже).

Итак, что я здесь делаю не так? Какая информация мне не хватает в учебнике PyUSB. Я использую неправильные команды / параметры PyUSB, или дело в отсутствии дополнительных драйверов, или дело в аппаратном обеспечении, Win10 или аппаратном обеспечении устройства? Спасибо за подсказки, как узнать, что не так.

Кстати, какое второе значение в dev.read(0x81,7) ? Количество байтов для чтения? Обычно я не знаю, сколько байтов отправит устройство. Я ожидал, что команда будет читать до тех пор, пока не появится перевод строки или какой-либо другой символ терминатора в течение времени ожидания. Где я могу найти "защищенную от дурака" документацию, руководства и примеры по PyUSB?

Код:

Выход из print(dev) :

Обновить:

Я думаю, там было без шансов ответить на этот вопрос, если только кто-то уже не сталкивался с теми же проблемами. Мне жаль всех вас (@Alex P., @Turbo J, @igrinis, @ 2xB), которые не торопились, чтобы внести свои предложения о помощи.

Мои выводы: (Надеюсь они будут полезны другим):

Как это работает для меня (пока):

Ниже приведен минимальный код, который я ожидал от поставщика / производителя. Но вместо этого я потратил много времени на отладку их документации. Тем не менее, все еще происходят некоторые странные вещи, например кажется, вы получаете данные, только если заранее запрашиваете заголовок. Но, ну, это не тема исходного вопроса.

Код:

Результат: (используя gnuplot)


  • Молодцы, что решили эту проблему. Я знаю, что МНОГИЕ инструменты SCPI содержат действительно неприятные ошибки, подобные тем, которые вы описываете.

Как только вы получите ответ от устройства на *IDN? запрос, вы должны быть в порядке. Это SCPI;)

Посмотрите это видео, оно поможет вам взять себя в руки.

На ваш вопрос о read() параметры. Цитата из источника PyUSB:

Когда тайм-аут опущен, используется Device.default_timeout property как тайм-аут операции. Значения указаны в миллисекундах.

Если вы установите достаточно большой размер буфера, вы получите только фактически прочитанные байты. Итак, ваши ожидания оправдались.

  • спасибо за ваше предложение. Нет, при отправке ничего не произойдет :CHAN1:SCAL 10v или любое другое значение. Получил ответ от продавца. Я обновлю вопрос.
  • К сожалению, проблема заключалась в устаревшей документации, предоставленной поставщиком. Смотрите мой ответ. Кстати, я не понимаю, почему люди создают (или смотрят) 1-часовой видеоролик для чего-то, что должно уместиться на 2-х страницах бумаги.

Прежде всего обратите внимание, что @igrinis опубликовал видео, показывающее, чего вы хотите достичь.

(Как заявил @igrinis :) Для второго значения в read(. ) , теоретически вы правы. Хорошо то, что практически достаточно часто вы можете запросить более длинные ответы. Так что попробуйте, например, запрашивая 256 байт, и посмотрите, исправляет ли это ваш текущий код.

Если это не решит вашу проблему:

Документация для PyUSB:

В основном Python Docstring, поэтому звоните help(. ) на каждый объект / функцию, которую вы получаете от PyUSB. Как вариант, найдите в исходном коде PyUSB все функции и объекты, которые вы хотите прочитать в строке документации.

[Обновление] Добавлены подсказки к замечательному комментарию, в котором уже есть некоторые ответы и многое другое.

Это не полная команда SCPI: отсутствует новая строка \n символ в конце.

  • Спасибо за подсказку. Ах . Так глупо, в документации есть пример с msg='test' , из-за чего у меня сложилось впечатление, что модуль PyUSB заботится о символе конца строки. Я могу протестировать только на следующей неделе и проголосую за и приму, если это сработает.
  • Простите, нет. Просто добавив \n ничего не меняет с ошибкой тайм-аута. Документация производителя устройства о связи также довольно скудная.
  • Судя по всему, PyUSB заботится о конечных символах.

Читайте также: