Linux를 사용하여 USB에서 수동으로 전원 공급 장치를 켜거나 끌 수 있습니까?
이 외부 USB 냉각 팬 (PC가 아닌 몸을 식히는 데 사용하는 종류)이 있으며 팬을 멀리 떨어진 곳에 놓고 싶기 때문에 터미널에서 제어 할 수있는 것이 좋습니다.
USB 장난감이 많기 때문에 다양한 다른 것들에도 유용 할 수 있다고 생각합니다. 공기 청정기 등이있을 수 있습니다 (실제로는 효과가 없다고 들었습니다).
Linux를 사용하여 USB에서 수동으로 전원 공급 장치를 켜거나 끌 수 있습니까?
이 외부 USB 냉각 팬 (PC가 아닌 몸을 식히는 데 사용하는 종류)이 있으며 팬을 멀리 떨어진 곳에 놓고 싶기 때문에 터미널에서 제어 할 수있는 것이 좋습니다.
USB 장난감이 많기 때문에 다양한 다른 것들에도 유용 할 수 있다고 생각합니다. 공기 청정기 등이있을 수 있습니다 (실제로는 효과가 없다고 들었습니다).
답변:
노트. 이 답변의 정보는 이전 커널 (최대 2.6.32)과 관련이 있습니다. 최신 커널에 대한 정보는 tlwhitec의 답변 을 참조하십시오 .
# disable external wake-up; do this only once
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo on > /sys/bus/usb/devices/usb1/power/level # turn on
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
(usb1을 usb n 으로 변경해야 할 수도 있습니다 )
출처 : Documentation / usb / power-management.txt.gz
sudo foo > bar
으로 직접 보낸 다음bar
foo
sudo
구문을 사용하여 실행 되므로 권한이 거부 됩니다 . 리디렉션은 루트 액세스 권한을 얻기 전에 발생하므로 실패합니다. 해결책은을 사용하는 sudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup'
것입니다. 루트를 얻고 새로운 지옥을 실행하여 리디렉션을 수행 한 다음 리디렉션 된 파일 설명자에 무언가를 출력하십시오.
이 문서 에 따르면 커널 2.6.32 에서 USB 전원 관리에 몇 가지 변경 사항이 있었으며 2.6.38 에서 해결 된 것으로 보입니다 . 이제 특정 장치 드라이버에 의해 제어되는 장치가 유휴 상태 가 될 때까지 기다려야합니다 . 드라이버가 지원해야합니다. 그렇지 않으면 장치가이 상태에 도달하지 않습니다. 불행하게도, 이제 사용자는 이것을 강제 할 기회가 없습니다. 그러나 운이 좋으면 기기가 유휴 상태가 될 수 있으면이 기능을 끄려면
echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend"
echo "auto" > "/sys/bus/usb/devices/usbX/power/level"
또는 2.6.38 이상의 커널의 경우 :
echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
echo "auto" > "/sys/bus/usb/devices/usbX/power/control"
이것은 말 그대로 장치가 유휴 상태가 된 순간에 일시 중단됨을 의미 합니다.
따라서 팬이 장치로 볼 수 있고 드라이버가 제어 할 수있는 "지능형"장치가 아닌 경우 현재 커널에서 많은 운이 없을 것입니다.
echo "on" > "/sys/bus/usb/devices/usbX/power/control"
있지만 원래 목적을 이해해야한다고 생각합니다. 자동 일시 중지 기능은 유휴 장치가 저전력 상태 (꺼져있는 것처럼 보일 수 있음)로 들어갈 수 있도록하기위한 것입니다. 호스트 나 외부 이벤트에 의해 필요할 때 나중에 다시 시작할 수 있습니다. 자동으로 발생합니다. 포트 자체는 실제로 절대로 꺼지지 않습니다. 실제로, 문서를 읽으십시오 ;)
dmesg | grep "usb"
하고 "usb"뒤에 숫자 usb 2-4.4: SerialNumber: A0848020
를 사용하십시오 /sys/bus/usb/devices/2-4.4/power/...
. 예를 들면 다음과 같습니다 .. 또한 장치를 사용하고 있지 않은지 확인하십시오. 이 프로세스를 단순화
적어도 올바르게 구성된 Terminus FE 1.1 USB 허브 칩에서 작동하는 이러한 솔루션을 발견했습니다.
1. 허브의 모든 USB 포트에서 전원을 끄려면 다음을 사용하여 허브에서 커널을 바인딩 해제 할 수 있습니다.
echo "1-4.4.4" > /sys/bus/usb/drivers/usb/unbind
전원을 다시 켜려면-
echo "1-4.4.4" > /sys/bus/usb/drivers/usb/bind
내가 사용 할 수 있었다 : 개별적으로 각 포트에서 전원을 2.Switching하는 것은 까다 롭습니다 hubpower을 각 포트를 제어하는 -하지만 단점과 함께 제공 : hubpower 첫 번째 연결이 끊어 적어도 우분투 시스템에서 disconect에 USB 장치의 모든 원인 느릅 나무 usbdevfs :
usb_ioctl.ioctl_code = USBDEVFS_DISCONNECT;
rc = ioctl(fd, USBDEVFS_IOCTL, &usb_ioctl);
이 기능을 ioctl
비활성화 하면 모든 장치를 분리하지 않고 개별 포트 전원을 끌 수 있었지만 전원이 즉시 다시 켜집니다 (아마 커널이 초기화되지 않은 장치를보고 있기 때문에) 일반적으로하고 싶었다. 패치 된 허브 파워가 여기 있습니다
Intel의 PowerTOP 을 사용하면 USB 주변 장치와 같은 장치를 실시간으로 전환 할 수 있습니다. 이것을 '튜너 블'이라고합니다.
sudo apt install powertop
sudo powertop
참고 것을 나쁜는 장치가 항상 의미합니다. 에 토글 좋은 것은 (기본값은 2000ms입니다) 사전 설정 비활성 절약 시간 후 장치를 끌 것입니다.
이러한 변경 사항을 영구적으로 유지하는 방법에 대한 자세한 내용은 PowerTOP 문서를 참조하십시오 .
이 스레드의 다른 포스터에서 설명한 것처럼 구성 스크립트를 생성합니다.
참고 :이 스크립트는 항상 켜져있는 USB 핀 전원에 영향을 미치지 않습니다.
장치를 활성화 및 비활성화하기 위해 드라이버 프로토콜 만 보냅니다.
핀 전원을 제어하려면 지원되는 스마트 USB 허브 또는 더 나은 마이크로 컨트롤러를 사용할 수 있습니다.
나는 이것을하고 싶었고 USB 하드웨어로는 할 수 없었습니다. 나는 그것을하는 방법을 해킹 한 방법으로 썼다 :
http://pintant.cat/2012/05/12/power-off-usb-device/ .
짧은 방법으로 : 나는 USB 릴레이를 사용하여 다른 USB 케이블 의 V CC 를 열고 닫았습니다 ...
echo '2-1' |sudo tee /sys/bus/usb/drivers/usb/unbind
우분투에서 작동
사람들이 이와 같은 질문을 게시하는 이유는 " EVIL "-USB 자동 일시 중단 " 기능 " 이 끔찍하기 때문 입니다.
자동 일시 중단은 "유휴"USB 장치에 전원을 공급하고 장치 드라이버가이 기능을 올바르게 지원하지 않으면 장치에 접촉 할 수 없게됩니다. 따라서 USB 포트를 켜고 끄는 것은 문제 자체가 아니라 문제의 증상입니다.
GLOBALLY가 자동 일시 중단을 비활성화 하는 방법을 보여 드리 므로 USB 포트를 수동으로 켜고 끌 필요가 없습니다.
당신은 편집 "할 필요가 없습니다 autosuspend_delay_ms USB의 autosuspend 세계적 및 해제 할 수 있습니다 : 개별적으로" 지속적으로 다음 명령을 사용하여 :
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/&usbcore.autosuspend=-1 /' /etc/default/grub
update-grub
systemctl reboot
우분투 18.04 화면 잡아 내 결과를 달성 한 방법을 보여주는 "긴 대답"의 끝에 다음과 같습니다.
그것은 사실이다 USB 전원 관리 커널 문서 상태의 autosuspend은 더 이상 사용되지되어야하며, 그 '장소'에서의 autosuspend_delay_ms 해제 USB의 autosuspend에 사용 "
"In 2.6.38 the "autosuspend" file will be deprecated
and replaced by the "autosuspend_delay_ms" file."
그러나 내 테스트에 따르면 아래의 / etc / default / grub 설정 usbcore.autosuspend=-1
은 USB 자동 일시 중단 기능을위한 글로벌 토글 로 사용될 수 있습니다 . 개별 " autosuspend_delay_ms "파일 을 편집 할 필요 는 없습니다 .
위에 링크 된 동일한 문서 는 "0"의 값이 ENABLED 이고 음의 값이 DISABLED 임을 나타냅니다 .
power/autosuspend_delay_ms
<snip> 0 means to autosuspend
as soon as the device becomes idle, and negative
values mean never to autosuspend. You can write a
number to the file to change the autosuspend
idle-delay time.
아래의 주석이 달린 Ubuntu 18.04 화면 캡처에서 내 결과가 어떻게 달성되고 재현 가능한지 설명 하는 autosuspend_delay_ms 의 기본값은 "0"( 활성화 )입니다 .
그런 후 있습니다 만 설정 usbcore.autosuspend=-1
브에서,이 값은 현재 마이너스 (있는 장애인 재부팅 후). 이렇게하면 개별 값을 편집하지 않아도되며 이제 USB 자동 일시 중지 기능을 비활성화 할 수 있습니다.
이것이 USB 자동 일시 중지 기능을 좀 더 쉽고 스크립트 가능하게 만듭니다.
power/level
이 더 이상 사용되지 않습니다. 사용하는power/control
대신 . (power/wakeup
OK입니다.) 또한, 그것은 단지 "자동차"와, 더 이상 아닙니다 "중단"을 "ON"으로 받아들입니다. "자동"은 충분히 똑똑하며 유휴 상태에서 전원이 꺼지지 않으면 장치의 결함입니다. 어쨌든 수동으로 전원을 끌 수 없습니다. 자세한 내용은 참조 아래의 대답 에 의한 tlwhitec : 커널의 문서 kernel.org/doc/Documentation/usb/power-management.txt