reštart USB myši

Problémy a zkušenosti s hardwarem, perifériemi a jejich ovladači
Zpráva
Autor
yondy
Příspěvky: 12
Registrován: 04 led 2014, 13:55

reštart USB myši

#1 Příspěvek od yondy »

Zdravím,
mám jeden problém. Vždy po spustení noťasu z režimu spánku mi nefunguje USB myš, vždy ju musím vytiahnuť a opäť vložiť.

Chcem sa opýtať či sa nejako nedá nastaviť. aby sa mi automaticky po prebudení nejako sama reštartovala. Aby som ju nemusel vyťahovať.

Podobný problém som mal aj s internet káblom, po prebudení mi tiež nešiel net, tento problém som ale vyriešil a net sa mi automaticky po prebudení vypne a zapne. To isté by som chcel aj s myškou ak by sa dalo.

Dikes za rady.
Linux Mint 17 Cinnamon 64-bit, cinnamon 2.2.13, kernel 3.15.0, Intel Core i5-2430M CPU 2.40GHz x 2, RAM 4 GiB, HDD 640 GB, integrována Intel Corp. 2nd gen., NVIDIA GeForce GT 540M

DrShame
Příspěvky: 145
Registrován: 12 dub 2014, 11:44

Re: reštart USB myši

#2 Příspěvek od DrShame »

Vygooglil jsem následující:

1. Níže uvedený program ulož jako usbreset.c do nějakého adresáře:

Kód: Vybrat vše

/* usbreset -- send a USB port reset to a USB device */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>

#include <linux/usbdevice_fs.h>


int main(int argc, char **argv)
{
    const char *filename;
    int fd;
    int rc;

    if (argc != 2) {
        fprintf(stderr, "Usage: usbreset device-filename\n");
        return 1;
    }
    filename = argv[1];

    fd = open(filename, O_WRONLY);
    if (fd < 0) {
        perror("Error opening output file");
        return 1;
    }

    printf("Resetting USB device %s\n", filename);
    rc = ioctl(fd, USBDEVFS_RESET, 0);
    if (rc < 0) {
        perror("Error in ioctl");
        return 1;
    }
    printf("Reset successful\n");

    close(fd);
    return 0;
}
2. ve stejném adresáři otevři terminál a kód zkompiluj pomocí:
cc usbreset.c -o usbreset

3. na zkompilovaném programu proveď nastavení spustitelného příznaku:
chmod +x usbreset

4. zjisti "Bus" id a "Device" id svého zařízení:
lsusb

např:

Kód: Vybrat vše

...
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 1bcf:0005 Sunplus Innovation Technology Inc. 
Bus 001 Device 003: ID 0603:00f2 Novatek Microelectronics Corp. Keyboard (Labtec Ultra Flat Keyboard)
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...
5. předpokládám, že bus 001 a device 004 je moje myš tak tyto údaje použiju v dalším kroku

6. sudo ./usbreset /dev/bus/usb/001/004

7. po spuštění příkazu dojde ké krátkému zastavení myši, tak to asi funguje :)

udělat to jako samospustitelné při startu je druhá věc

yondy
Příspěvky: 12
Registrován: 04 led 2014, 13:55

Re: reštart USB myši

#3 Příspěvek od yondy »

díkes, príkaz funguje, škoda že mi niekedy zaberie viac času to tam naťukať, ako iba vytiahnuť a pripojiť myš ručne :D ešte keby niekto poradil ako to zautomatizovať, tak by som bol veľmi vďačný :D
Linux Mint 17 Cinnamon 64-bit, cinnamon 2.2.13, kernel 3.15.0, Intel Core i5-2430M CPU 2.40GHz x 2, RAM 4 GiB, HDD 640 GB, integrována Intel Corp. 2nd gen., NVIDIA GeForce GT 540M

DrShame
Příspěvky: 145
Registrován: 12 dub 2014, 11:44

Re: reštart USB myši

#4 Příspěvek od DrShame »

Pokud ty čísla Bus a Device zůstávají stejný při každým startu, tak mě napadá jedna věc:

1. Vytvoř textový soubor např. "usbres", do kterého vepiš ten příkaz i s parametry. Uvnitř to musí být s celou cestou, tzn.:
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/004 (čísla ovšem podle tvé konfigurace)

2. opět aby šel spustit
chmod +x usbres

3. zkopíruj ten usbres do adresáře /etc/init.d
sudo cp usbres /etc/init.d/

4. vytvoř symbolický link na ten soubor do adresáře /etc/rc2.d/ s předponou "S99" - aby byl spuštěn až po všem ostatním
sudo ln -s /etc/init.d/usbres /etc/rc2.d/S99usbres

Uff, to by snad mohlo fungovat. Tak teď už jen restart a uvidíš.

Mint/Ubuntu nemám tak nemůžu vyzkoušet :)

yondy
Příspěvky: 12
Registrován: 04 led 2014, 13:55

Re: reštart USB myši

#5 Příspěvek od yondy »

bus číslo ostáva rovnaké, ale device číslo sa každý raz mení
Linux Mint 17 Cinnamon 64-bit, cinnamon 2.2.13, kernel 3.15.0, Intel Core i5-2430M CPU 2.40GHz x 2, RAM 4 GiB, HDD 640 GB, integrována Intel Corp. 2nd gen., NVIDIA GeForce GT 540M

DrShame
Příspěvky: 145
Registrován: 12 dub 2014, 11:44

Re: reštart USB myši

#6 Příspěvek od DrShame »

Tak tam zkus dát těch příkazů víc pod sebe s odlišným device id. Možná, že je jedno jestli restartuješ jedno nebo více zařízení po sobě :)

Tedy v tom souboru /etc/init.d/usbres např.:

Kód: Vybrat vše

/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/001
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/002
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/003
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/004
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/005
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/006
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/007
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/008
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/001/009

DrShame
Příspěvky: 145
Registrován: 12 dub 2014, 11:44

Re: reštart USB myši

#7 Příspěvek od DrShame »

Ještě lepší varianta, samo to zjistí bus a dev id podle názvu z lsusb (ten by měl být pořád stejný):

tzn. obsah textového souboru usbres:

Kód: Vybrat vše

bus=`lsusb | grep 'Sunplus Innovation Technology Inc.' | awk '{print
$1}' | awk '{print substr($0,5,3)}'`
dev=`lsusb | grep 'Sunplus Innovation Technology Inc.' | awk '{print
$1}' | awk '{print substr($0,16,3)}'`
/home/jménoúčtu/nejakejadresářkamsitodal/usbreset /dev/bus/usb/$bus/$dev
jen tak pro otestování sudo ./usbres resetne to zařízení dle názvu Sunplus ...

pak v tom /etc/init.d/usbres je to spuštěné jako root, takže sudo není potřeba

edit: samozřejmě nezapomenout na symlink do /etc/rc2.d jak je uvedeno výše

yondy
Příspěvky: 12
Registrován: 04 led 2014, 13:55

Re: reštart USB myši

#8 Příspěvek od yondy »

sranda, to s tým bus a dev už je vyriešené kedže mi to hľadá podľa názvu myši, horšie že aj keď som to urobil ako ste mi napísali, nereštartne sa to automaticky po prebratí zo spánku

skúšal som to potom cez terminál, že zadám len usbres, nenašlo mi ho, tak som musel zadať celú cestu /etc/init.d/usbres a napísalo prístup odmietnutý, nakoniec som to musel robiť cez sudo a až potom to šlo

Takže zatiaľ mi je stále rýchlejšie tu myš vytiahnuť, kedže mám dlhé heslo :D

Dúfam že ešte máte nejaké nápady ako to zautomatizovať :D Keď to funguje v blbom windowse, zišlo by sa to spojazdniť aj na linuxe :D
Linux Mint 17 Cinnamon 64-bit, cinnamon 2.2.13, kernel 3.15.0, Intel Core i5-2430M CPU 2.40GHz x 2, RAM 4 GiB, HDD 640 GB, integrována Intel Corp. 2nd gen., NVIDIA GeForce GT 540M

DrShame
Příspěvky: 145
Registrován: 12 dub 2014, 11:44

Re: reštart USB myši

#9 Příspěvek od DrShame »

To probuzení ze spánku nastartuje linux od začátku - tzn. grub > init > login > plocha ? Protože ty init apod ... se provádí při zapnutí a jestli při probuzení nedochází k inicializaci tak se ta úprava ani nemá šanci projevit.

edit: asi to tak bude a suspend resume neprochází přes init. To by znamenalo, že v tom /etc/init.d je to zbytečně a musí se to dát jinam :)

DrShame
Příspěvky: 145
Registrován: 12 dub 2014, 11:44

Re: reštart USB myši

#10 Příspěvek od DrShame »

Tak už mám konečné řešení !

Umísti ten skript usbres do adresáře /etc/pm/sleep.d/ a nastav mu opět spustitelný příznak. Obsah toho adresáře se spouští po navrácení ze suspend. Teď jsem to odzkoušel (do volné particie jsem si kvůli tomu nainstalovat Mint :) )

Zamčeno