strom individuell am usb port ein und ausschalten?
servus,
ich habe einen remote rechner an dem ein usb gerät dran hängt. dieser hängt sich ab und zu mal auf uns muss einfach mal aus und eingestöpselt werden am usb port.
jetzt frage ich mich ob man auch einfach die stromversorgung am USB port aus und einschalten kann, um nicht vor ort das gerät ein und ausstöpseln sondern das ganze auch remote erledigen kann?
habe gegoogelt, aber keine lösung gefunden. jemand eine idee?
cheers.
3 Antworten
Hallo!
Versuche es mal mit einem USB-Hub, bei dem Du jeden einzelnen Port manuell ein und aus schalten kannst.
Die größeren haben auch ein eigenes Netzteil, um die Spannungsversorgung stets aufrecht erhalten zu können.
Ich habe derartiges für USB 2.0, als auch für USB 3.0.
Und ebenfalls habe ich Stromsteckleisten mit einzeln schaltbaren Steckbuchsen.
Gruß
Martin
Ok, das mit dem "remote" hatte ich überlesen...
Aber ich glaube, dass es derartiges auch gar nicht gibt.
Denn alleine die notwendige Steuerungs-Hardware dazu, erscheint mir ziemlich aufwändig und somit auch teuer zu sein.
Eine machbare und relativ "einfache" Methode wäre diese:
Nimm ein Relaismodul (z.B. die Dinger für Arduino-Basteleien) mit Optokoppler und verkabele die Steuerpins wie folgt:
- VCC an einen beliebigen VCC Pin eines USB-Headers am Mainboard.
- GND an einen GND-Pin des selben USB-Headers und den GND-Pin eines RS232-Headers.
- SIG an den RTS-Pin des verwendeten RS232-Headers.
Dann nimm entweder die VCC- oder GND-Leitung des zu schaltenden USB-Ports und klemm diese an den mittleren und den NC Schaltkontakt des Relais.
Alles was du jetzt noch brauchst, ist ein Programm um den RTS-Pin des RS232-Headers separat anzusteuern. Solange der Pin aktiv ist, ist die Stromzufuhr zum geschalteten USB-Port unterbrochen.
Für ein Linux-System hätte ich sogar ein passendes Programm parat (hab ich geschrieben um über das beschriebene Verfahren meinen Sekundärserver per SSH ein- und ausschalten zu können; ACPI läuft bei dem Ding nicht ordentlich):
#include <errno.h>
#include <fcntl.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <termios.h>
#include <time.h>
#include <unistd.h>
void usage(const char *exename){
printf("usage: %s [-h] [-m] <port> <duration>\n", exename);
}
int main(int argc, char *argv[]){
int fd = -1;
int duration = -1;
const char *port = NULL;
bool milliseconds = false;
int opt;
while((opt = getopt(argc, argv, "hm")) != -1){
switch(opt){
case 'h':
usage(argv[0]);
return 0;
case 'm':
milliseconds = true;
break;
default:
return -1;
}
}
if(optind >= argc){
usage(argv[0]);
return 1;
}
port = argv[optind++];
if(optind >= argc){
usage(argv[0]);
return 2;
}
if(sscanf(argv[optind], "%d", &duration) != 1 || duration < 0){
fprintf(stderr, "invalid duration: \"%s\".\n", argv[optind]);
return 3;
}
++optind;
if((fd = open(port, O_RDWR | O_NOCTTY)) < 0){
fprintf(stderr, "failed to open \"%s\"", port);
perror("");
return 4;
}
int flag = TIOCM_RTS;
ioctl(fd, TIOCMBIS, &flag);
if(milliseconds){
if(duration <= 1000){
usleep(duration * 1000);
}
else{
int seconds = duration / 1000;
sleep(seconds);
usleep((duration - (seconds * 1000)) * 1000);
}
}
else{
sleep(duration);
}
ioctl(fd, TIOCMBIC, &flag);
close(fd);
}
Achtung!!
Nur über eine SSH-Verbindung nutzen!
Funktioniert der Strom nicht an den USB-Ports funktioniert auch kein Gerät ohne externe Stromversorgung. Also auch keine normale Maus oder Tastatur!
Einschalten ist somit nicht mehr möglich!
Strom aus an allen USB-Ports:
sudo echo '1-1'|sudo tee /sys/bus/usb/drivers/usb/unbind
Strom an an allen USB-Ports:
sudo echo '1-1'|sudo tee /sys/bus/usb/drivers/usb/bind
hi martin,
danke für die info. aber ich kann bei den dingern auch nicht remote ein usb port ein und ausschalten oder?