USB 포트의 전원을 끕니다. 또는 전체 USB 하위 시스템의 전원을 끕니다.


28

특정 시간에 프로그래밍 방식으로 끄기 위해 특별히 구입 한 USB 램프가 있으므로 USB 포트의 전원을 제거해야합니다.

usb6에 usb-hub이 있다고 생각합니다. 램프는이 허브의 포트 중 하나에 연결됩니다.

#myhost$ lsusb 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...
...
Bus 008 Device 006: ID 050d:0234 Belkin Components F5U234 USB 2.0 4-Port Hub

내가 시도한 것은 다음과 같습니다.

두 솔루션은 여기에 첫 번째 제안 :

echo disabled > /sys/bus/usb/devices/usb1/power/wakeup 
echo suspend > /sys/bus/usb/devices/usb1/power/level  # turn off

하지만 write error: Invalid argument쓰려고 할 때 얻는다 /sys/bus/usb/devices/usb1/power/level:

$sudo bash -c 'echo disabled > /sys/bus/usb/devices/usb6/power/wakeup'
$echo suspend|sudo tee /sys/bus/usb/devices/usb6/power/level suspend
tee: /sys/bus/usb/devices/usb6/power/level: Invalid argument
$sudo bash -c 'echo suspend> /sys/bus/usb/devices/usb6/power/level'bash: line 0: echo: write error: Invalid argument

두 번째 해결책 :

sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'

USB 허브 장치의 전원이 꺼집니다.

나는 또한 이것을 따르려고 노력했다 :

그러나 출력이 lsusb -t멈추었습니다.

$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C

이 방법을 사용하여 '2-1.1'부분을 얻지 못하게합니다.

echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind

이 정보를 얻는 다른 방법이 있습니까?

또는 전체 USB 하위 시스템의 전원을 끄는 방법이 있습니까? 같은 것 modprobe -r usb_etc?

내 커널은 다음과 같습니다

$uname -r
3.2.0-4-amd64

어떤 구문 오류? 이 경우 간단한 문자열 'suspend', 'disabled'를 인용 할 필요가 없습니다. 당신이 인용하는 습관에 빠졌다면, 당신에게는 좋지만,이 경우에는 필요하지 않습니다.
user84207

나는 lsusb -t전화를 걸 으려고 시도했지만 그것을 디버깅해야 할 때 유용한 것을 찾지 못했습니다. 솔직히 lsub에서 버그를 찾을 시간이없고 지금도 재현 할 수 없으므로 연결된 장치에 따라 다를 수 있습니다. 집에 도착하기 위해 기다려야합니다. 그것을 재현하십시오.
user84207

답변:


20

uhubctl- 명령 행 유틸리티를 사용하여 호환되는 USB 허브의 포트 당 USB 전원을 제어 할 수 있습니다 .

포트 당 전원 전환을 지원하는 허브에서만 작동하지만 많은 최신 마더 보드에는이 기능을 지원하는 USB 허브가 있습니다.

컴파일하기:

git clone https://github.com/mvp/uhubctl
cd uhubctl
make

uhubctl로 제어 할 수있는 모든 허브, 해당 위치 및 포트의 상태를 나열하려면 다음을 수행하십시오.

uhubctl

단일 호환 허브의 포트 5의 전원을 끄려면 :

uhubctl -a 0 -p 5

호환되는 허브가 둘 이상 연결된 경우 -l허브 위치를 지정하여 제어하십시오.

uhubctl -a 0 -p 5 -l 3-1.2

전원을 껐다 켜려면 다음을 수행하십시오.

uhubctl -a 2 -p 5

USB 3.0 허브도 지원되며 실제로 몇 가지 새로운 USB 3.0 허브가 제대로 작동합니다.

자세한 내용은 여기를 참조하십시오 .

공개-나는 uhubctl의 저자입니다.


조금 더 많은 정보가 좋을 것입니다. 특히 당신이 저자이고 사용 방법에 대한 표준 패키지 예제가 아니기 때문에, 기능 / 제한이있는 경우, 위험이있는 경우, 링크 전용 답변이 바람직하지 않습니다.
Zachary Brady

2
글쎄, 전체 README 파일을 복사 / 붙여 넣는 것은 나에게 밝은 생각처럼 보이지 않습니다. 모든주의 사항이 설명되어 있습니다.
mvp

아니요, 전체 읽어보기가 과도합니다. 프로그램을 사용하여 질문에 제기 된 문제를 해결하는 방법. 그리고 해당 특정 사용 사례에 대한 경고가있는 경우 전체 응용 프로그램이 아닙니다. 첫 번째 의견이 명확하지 않으면 죄송합니다.
Zachary Brady

1
참고 :이 방법은 Renesas UPD720202 PCIe-USB 호스트 컨트롤러 제품군에서 작동합니다. :) 감사.
Wossname

@Wossname 감사합니다. github.com/mvp/uhubctl/issues 에서 새로운 이슈로 추가 하시겠습니까? 지원되는 장치 목록을 업데이트하겠습니다.
mvp

20

최신 커널 "suspend"가 더 이상 작동하지 않으면 linux 짧은 버전 의 USB 전원 공급 장치 제어 (켜기 / 끄기)를 참조하십시오 .

echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
echo "auto" > "/sys/bus/usb/devices/usbX/power/control"

그러나 문자 그대로 전원을 끄는 것이 아니라 장치의 전원을 끄도록 신호를 보내고 전원 관리를 구현하고 올바른 일을하는 것은 장치의 책임입니다.

커널 의 공식 문서 에 많은 세부 정보가 있으며 다양한 파일 /sys/bus/usb/devices/.../power/과 장치 및 포트를 관리하는 방법 에 대해 설명합니다 .

실제 USB 장치가 아닌 것들 (USB 램프가 lsusb에 표시됩니까?)이 불행한 경우, USB 램프와 배터리를 충전하고 USB를 통해 데이터를 전송하는 GPS 로거로 직접 시도했습니다. cp210x usb to serial로 연결되며 전원을 끄지 않습니다. gps를 "연결 해제" echo '5-4.6' > /sys/bus/usb/drivers/usb/unbind하고 다시 연결할 수 echo '5-4.6' > /sys/bus/usb/drivers/usb/bind있지만 배터리 충전 연결 장치 는 항상 켜져 있습니다.

그러나 일부 허브가 제대로 수행 하는 것 같습니다 .


0

" autosuspend_delay_ms "파일 을 개별적으로 편집 할 필요 는 없습니다 .

USB의 autosuspend은 비활성화 할 수 전역을 하고 지속적 으로 :

sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/&usbcore.autosuspend=-1 /' /etc/default/grub

update-grub

systemctl reboot

제안 된 수정 사항을 테스트하고 정확성을 검증하는 데 몇 초 밖에 걸리지 않습니다.

아래 의 Ubuntu 18.04 주석이 달린 스크린 샷은 위에서 설명한대로 모든 USB 자동 일시 중지 설정을 비활성화 하고 호스트를 재부팅하는 수정 방법을 보여줍니다 .

USB 자동 일시 중지 기능을 전역 적으로 비활성화하는 Ubuntu 18.04 데모

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.