Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
[i][/i] Mam lapka, na nim kartę dvb na usb.
Wsio działa ok ale problem powstaje przy usypianiu i hibernacji.
Urządzenie nie działa po wybudzeniu.
Lekarstwem jest wyjecie i włożenie z powrotem do usb urządzenia ale to żadne rozwiązanie bo w końcu gniazdo usb i tuner rozsypią się w drobny mak.
Jak programowo zasymulować taki zabieg ?
Próbowałem przeładowywać moduły od karty dvb ale to raz działa, pięć razy nie bo nie zawsze firmware się prawidłowo ładuje.
Offline
1474
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:07:44)
Offline
Może unbind i bind portu usb? W
/sys/bus/usb/drivers/usb/
będziesz miał plik bind/unbind/uevent i linki typu usb1, usb2, X-Y kierujące do poszczególnych urządzeń. Te na których coś jest podpięte powinny mieć nazwę typu X-Y
wigwam ~ # ls -l /sys/bus/usb/drivers/usb/ razem 0 lrwxrwxrwx 1 root root 0 01-23 21:44 3-1 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb3/3-1 lrwxrwxrwx 1 root root 0 01-23 21:44 3-2 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb3/3-2 --w------- 1 root root 4096 01-23 21:45 bind lrwxrwxrwx 1 root root 0 01-23 21:44 module -> ../../../../module/usbcore --w------- 1 root root 4096 01-23 21:44 uevent --w------- 1 root root 4096 01-23 21:45 unbind lrwxrwxrwx 1 root root 0 01-23 21:44 usb1 -> ../../../../devices/pci0000:00/0000:00:1a.7/usb1 lrwxrwxrwx 1 root root 0 01-23 21:44 usb2 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb2 lrwxrwxrwx 1 root root 0 01-23 21:44 usb3 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb3 lrwxrwxrwx 1 root root 0 01-23 21:44 usb4 -> ../../../../devices/pci0000:00/0000:00:1a.1/usb4 lrwxrwxrwx 1 root root 0 01-23 21:44 usb5 -> ../../../../devices/pci0000:00/0000:00:1d.0/usb5 lrwxrwxrwx 1 root root 0 01-23 21:44 usb6 -> ../../../../devices/pci0000:00/0000:00:1d.1/usb6 lrwxrwxrwx 1 root root 0 01-23 21:44 usb7 -> ../../../../devices/pci0000:00/0000:00:1d.2/usb7 lrwxrwxrwx 1 root root 0 01-23 21:44 usb8 -> ../../../../devices/pci0000:00/0000:00:1d.3/usb8
Offline
Łap sznurki:
http://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line
http://www.clearchain.com/blog/posts/resetting-the-usb-bus-under-linux
U mnie działa na 156%, choć nie pamiętam, z którego sznurka to pochodzi, bo mam tylko skompilowaną binarkę pod ręką.
Ostatnio edytowany przez Jacekalex (2015-01-23 21:57:19)
Offline
[quote=Jacekalex]...[/quote]
To nie zdaje egzaminu w tym przypadku.
[12793.697047] usb 1-1.2.2: reset high-speed USB device number 19 using ehci-pci [12813.753019] usbcore: deregistering interface driver dvb_usb_af9035 [12833.759169] usb 1-1.2.2: dvb_usb_v2: 2nd usb_bulk_msg() failed=-75 [12833.759203] dvb_usb_af9035: probe of 1-1.2.2:1.0 failed with error -75 [12833.759256] usbcore: registered new interface driver dvb_usb_af9035 [12919.232142] usb 1-1.2.2: reset high-speed USB device number 19 using ehci-pci
Ale już wiem koło czego się kręcić.
Offline
Znalazłem rozwiązanie.
Polecenie
echo 1 > /sys/bus/usb/devices/1-1.2.2/remove
Wywala urządzenie całkowicie z systemu.
Nawet lsusb go nie wykrywa.
Przy wybudzaniu urządzenie cudownie ożywa i firmware ładuje się prawidłowo.
Problem zaś pozostał teraz taki.
Gdzie to dopisać aby wykonywało się podczas usypiania/hibernacji?
W tym pier* systemd nie umiem z tym dojść do ładu.
Offline
https://wiki.archlinux.org/index.php/Power_management#Sleep_hooks ?
Offline
[quote=ilin]Znalazłem rozwiązanie.
Polecenie
echo 1 > /sys/bus/usb/devices/1-1.2.2/remove
Wywala urządzenie całkowicie z systemu.
Nawet lsusb go nie wykrywa.
Przy wybudzaniu urządzenie cudownie ożywa i firmware ładuje się prawidłowo.
Problem zaś pozostał teraz taki.
Gdzie to dopisać aby wykonywało się podczas usypiania/hibernacji?
W tym pier* systemd nie umiem z tym dojść do ładu.[/quote]
Trochę techniki i człowiek się gubi co? xD
Rzuć okiem na ten post: https://forum.dug.net.pl/viewtopic.php?pid=281669#p281669 — tam jest od połowy o ogarnianiu hibernacji. Tylko jakiś wredny admin mi sklejał posty i w sumie mi się z jednopostowych myśli zrobił jakiś burdel xD
Offline
Systemd ACPi też połknął?
Może starczyłoby pomaszkecić w /etc/acpi/* albo /etc/pm*/ ?
Ostatnio edytowany przez Jacekalex (2015-01-27 03:26:23)
Offline
Czyli połknął... :P
Offline
[quote=morfik][quote=ilin]Znalazłem rozwiązanie.
Polecenie
echo 1 > /sys/bus/usb/devices/1-1.code]2.2/remove
Wywala urządzenie całkowicie z systemu.
Nawet lsusb go nie wykrywa.
Przy wybudzaniu urządzenie cudownie ożywa i firmware ładuje się prawidłowo.
Problem zaś pozostał teraz taki.
Gdzie to dopisać aby wykonywało się podczas usypiania/hibernacji?
W tym pier* systemd nie umiem z tym dojść do ładu.[/quote]
Trochę techniki i człowiek się gubi co? xD
Rzuć okiem na ten post: https://forum.dug.net.pl/viewtopic.php?pid=281669#p281669 — tam jest od połowy o ogarnianiu hibernacji. Tylko jakiś wredny admin mi sklejał posty i w sumie mi się z jednopostowych myśli zrobił jakiś burdel xD[/quote]
Możesz mi wyjaśnić to :
ExecStartPre=..... ### przed snem ExecStart=,,,,, ##### ? ExecStartPost=...... ### Po wybudzeniu
Czy moje rozumowanie w komentarzach jest prawidłowe ?
Offline
Nie, każdy z tych trzech oznacza to samo, czyli startowanie usługi. W ExecStart masz główny proces, czyli jeśli ten zgłosi błąd, to unit wyrzuci błąd. W pozostałych masz wykonywane akcję przed głównym procesem i po głównym procesie. Jeśli dałbyś w ExecStartPre akcję od pingowania jakiegoś adresu i ten zgłosi błąd, to unit przejdzie dalej do ExecStart i wykona główny proces. Jeśli teraz byś pingował adres w linijce z ExecStart, i zostanie zwrócony błąd, unit przerwie działanie. W różnych typach usług możesz różnie to sobie precyzować. Możesz mieć wiele ExecStart, ExecStartPre i wtedy kolejność będzie od góry do dołu. Podobnie masz z opcją ExecStop
W kaðzym razie wszystkie linijki ze Start są wykonywane gdy unit jest odpalany z parametrem Start, i wszystkie linijki ze Stop są wykonywane gdy unit jest wykonywany z opcją Stop.
Offline
No dobra ale dalej tego nie łapię.
Moim celem jest takie cuś.
Przed uśpieniem ma się wykonać polecenie.
/usr/bin/killall tvheadend && /bin/echo 1 > /sys/bus/usb/devices/1-1.2.2/remove
Przy wybudzaniu ma się wykonać.
su adam -c /usr/bin/tvheadend
Zrobiłem takie cuś ale to nie działa.(dotyczy pierwszego polecenia)
[Unit] Description=User suspend actions Before=sleep.target [Service] User=%i Type=simple Environment=DISPLAY=:0 ExecStartPre=/usr/bin/killall tvheadend ExecStart="/bin/echo 1 > /sys/bus/usb/devices/1-1.2.2/remove" [Install] WantedBy=sleep.target
Offline
Rzuć okiem na https://forum.dug.net.pl/viewtopic.php?pid=281883#p281883 , powinno ci się trochę rozjaśnić.
Druga sprawa, w systemd się nie używa su -- od tego masz dyrektywy USER= i GROUP= . Jeszcze taka uwaga o wywoływanie poleceń. Korzystaj z /bin/sh , przykład:
ExecStart="/bin/echo 1 > /sys/bus/usb/devices/1-1.2.2/remove" ExecStart=/bin/sh -c "/bin/echo 1 > /sys/bus/usb/devices/1-1.2.2/remove"
W skrócie -- musisz sobie zrobić dwa unity -- jeden mający Before=sleep.target drugi After=sleep target i rozdziel sobie te dwa polecenia.
Ostatnio edytowany przez morfik (2015-01-27 20:00:09)
Offline
Dwie trzecie już za sobą.
Utworzyłem dwa unity.
[b]/etc/systemd/system/suspend@.service[/b]
[Unit] Description=User suspend actions Before=sleep.target root-suspend.service [Service] User=%I Type=oneshot ExecPreStart=/usr/bin/killall tvheadend ExecStart=/usr/bin/killall tvheadend [Install] WantedBy=sleep.target
[b]/etc/systemd/system/suspend1@.service[/b]
[Unit] Description=User suspend actions Before=sleep.target root-suspend.service [Service] User=%I Type=oneshot ExecPreStart=/bin/sh -c "/bin/echo 1 > /sys/bus/usb/devices/1-1.2.2/remove" ExecStart=/bin/sh -c "/bin/echo 1 > /sys/bus/usb/devices/1-1.2.2/remove" [Install] WantedBy=sleep.target
To działa.
Tvheadend jest ubijane i urządzenie usb dezaktywowane.
sb 1-1.2.2: dvb_usb_v2: 'ITE 9135(9006) Generic' successfully deinitialized and disconnected USB disconnect, device number 14
Mam jednak problem z unitem który ma uruchamiać tvheadend przy wybudzaniu.
[b]/etc/systemd/system/resume@.service [/b]
[Unit] Description=User system resume actions After=sleep.target root-resume.service [Service] User=adam Type=oneshot ExecStart=/usr/bin/tvheadend [Install] WantedBy=sleep.target
Ten nie działa.
Co jest w nim źle ?
Offline
Trochę pomieszałeś. xD
W /etc/systemd/system/suspend1@.service ma być jeden exec , bo tak to ci dwa razy to samo polecenie wykonuje.
Co do nazw unitów. Nie musisz używać @ jeśli nic za nią nie dajesz, czyli zamiast resume@.service daj zwyczajne resume.service . Ten string za @ jest wykorzystywany w unitach, czyli jak tworzysz dowiązanie np. resume@adam.service , wtedy w unicie dajesz w USER=%I i ci automatycznie uzupełnia użytkownika. Jeśli precyzujesz usera na sztywno, to nie potrzebujesz @ .
Kolejna sprawa, jeśli masz tylko dwa unity (z tego co zrozumiałem), dopasuj sobie odpowiednio Before I after. W tym wypadku zostaw jedynie sleep.target
A co do samych u nitów. sprwadź co mówi
systemctl status nazwa_unitu.service
I jeszcze taka uwaga -- tam jest ExecStartPre a nie ExecPreStart .
___
Przepisałem ci te unity. W skrócie, stwórz sobie dwa pliki
adam-suspend.service adam-resume.service
Do pierwszego z nich wrzuć:
[Unit] Description=Adam suspend Before=sleep.target [Service] User=adam Type=oneshot ExecStart=/usr/bin/killall tvheadend ExecStart=/bin/sh -c "/bin/echo 1 > /sys/bus/usb/devices/1-1.2.2/remove" [Install] WantedBy=sleep.target
Do drugiego:
[Unit] Description=Adam resume After=sleep.target [Service] User=adam Type=oneshot ExecStart=/usr/bin/tvheadend [Install] WantedBy=sleep.target
Potem daj:
# systemctl daemon-reload # systemctl enable adam-resume.service # systemctl enable adam-suspend.service
I powinno ruszyć już
Offline
[quote=ilin]Znalazłem rozwiązanie.
Polecenie
echo 1 > /sys/bus/usb/devices/1-1.2.2/remove
Wywala urządzenie całkowicie z systemu.
Nawet lsusb go nie wykrywa.
Przy wybudzaniu urządzenie cudownie ożywa i firmware ładuje się prawidłowo.[/quote]
Podłącze się pod temat. W porcie usb mam tuner, który widoczny jest
pic@pic:~$ lsusb Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 006 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 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 003: ID 048d:9006 Integrated Technology Express, Inc. IT9135 BDA Afatech DVB-T HDTV Dongle Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub pic@pic:~$
W katalogu[b] /sys/bus/usb/devices[/b] widoczny jest on tak
pic@pic:/sys/bus/usb/devices$ ls 1-0:1.0 3-0:1.0 3-1:1.0 4-0:1.0 6-0:1.0 usb2 usb4 usb6 2-0:1.0 3-1 3-1:1.1 5-0:1.0 usb1 usb3 usb5 pic@pic:/sys/bus/usb/devices$
Chcę go usunąć, ale
root@pic:/sys/bus/usb/devices# echo 1 > /sys/bus/usb/devices/6-0:1.0/ remove bash: /sys/bus/usb/devices/6-0:1.0/: Jest katalogiem root@pic:/sys/bus/usb/devices#
Offline
a ta spacja między katalogiem z nazwą usb a plikiem remove to po co Ci potrzebna?
Offline
[quote=morfik]#17......[/quote]
To nie działało.
Błąd był w sztuce.
Polecenia przed snem musiały być z uprawnieniami roota.
Teraz a mam dwa unity.
[b]/etc/systemd/system/root-suspend.service[/b]
[Unit] Description=Local suspend actions Before=sleep.target root-suspend.service [Service] Type=simple ExecStartPre=/usr/bin/pkill tvheadend ExecStart=/bin/sh -c "/bin/echo 1 > /sys/bus/usb/devices/1-1.2.2/remove" [Install] WantedBy=sleep.target
[b]/etc/systemd/system/adam-resume.service[/b]
[Unit] Description=Adam resume After=sleep.target [Service] User=adam Type=oneshot ExecStart=/bin/sleep 3 ; /usr/bin/tvheadend [Install] WantedBy=sleep.target
To wydaje się działać dobrze.
[b]Dzięki wielkie.[/b]
Tak na marginesie zapytam bo tego nie rozróżniam.
To czy ma być wykonywane z uprawnieniami roota czy usera zależy od nazwy pliku czy od tego co w nim ?
Offline
Nazwa jest dowolna jeśli nie używasz @. Jeśli wrzucisz linijkę z USER, to wtedy wszystko co jest w exec będzie wykonywane z uprawnieniami tego usera. Rzuć sobie okiem na http://www.freedesktop.org/software/systemd/man/systemd.unit.html
Jak widać, systemd nie taki straszny. xD
Ostatnio edytowany przez morfik (2015-01-28 15:05:28)
Offline
<offtop>
Oczywiście że straszny bo zamiast skryptu to startowania/zamykania usługi wyglądającego np tak:
#!/bin/bash exec /costam
Muszę się głowić nad jakimiś buraczanymi unitami zastanawiać się który kiedy się wykona i z jakimi prawami ;p Do tego wszsytkie kosmiczne logi w siakimś żurnalu. Próbowałem się pojednać z systemd nie wyszło i nie mam zamiaru próbować więcej ;p
<offtop/>
Offline
czyli systemd to tak jak socjalizm - doskonale sobie radzi z problemami nie występującymi w innych ustrojach...
Offline
[quote=ethanak]czyli systemd to tak jak socjalizm - doskonale sobie radzi z problemami nie występującymi w innych ustrojach...[/quote]
raczej
"bohatersko walczy z problemami nieznanymi w żadnym innym ustroju".[/quote]
Niby to samo, ale sens nieco inny.
Między "nie występuje" a "nieznany" różnica jest zasadnicza. ;)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
[quote=winnetou]a ta spacja między katalogiem z nazwą usb a plikiem remove to po co Ci potrzebna?[/quote]
Przeoczyłem tą spację. Teraz robię tak
root@pic:/home/pic# ls /sys/bus/usb/devices 1-0:1.0 3-0:1.0 5-0:1.0 6-3 6-3:1.1 usb2 usb4 usb6 2-0:1.0 4-0:1.0 6-0:1.0 6-3:1.0 usb1 usb3 usb5 root@pic:/home/pic# ls /sys/bus/usb/devices/ | awk '{print "echo 1 > /sys/bus/usb/devices/"$0"/remove" | "sh"}' sh: 1: cannot create /sys/bus/usb/devices/1-0:1.0/remove: Permission denied sh: 2: cannot create /sys/bus/usb/devices/2-0:1.0/remove: Permission denied sh: 3: cannot create /sys/bus/usb/devices/3-0:1.0/remove: Permission denied sh: 4: cannot create /sys/bus/usb/devices/4-0:1.0/remove: Permission denied sh: 5: cannot create /sys/bus/usb/devices/5-0:1.0/remove: Permission denied sh: 6: cannot create /sys/bus/usb/devices/6-0:1.0/remove: Permission denied sh: 8: cannot create /sys/bus/usb/devices/6-3:1.0/remove: Directory nonexistent sh: 9: cannot create /sys/bus/usb/devices/6-3:1.1/remove: Directory nonexistent sh: echo: I/O error sh: echo: I/O error sh: echo: I/O error sh: echo: I/O error sh: echo: I/O error sh: echo: I/O error root@pic:/home/pic# ls /sys/bus/usb/devices/ usb1 usb2 usb3 usb4 usb5 usb6 root@pic:/home/pic# ls /sys/bus/usb/devices/ usb1 usb2 usb3 usb4 usb5 usb6 root@pic:/home/pic#
Jak widać powyżej tuner z usb został usunięty, ale jak go ponownie zamontować bez restartu komputera?
Ostatnio edytowany przez prosze (2015-01-28 20:33:10)
Offline
Time (s) | Query |
---|---|
0.00011 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00099 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.17.181' WHERE u.id=1 |
0.00073 | UPDATE punbb_online SET logged=1732229308 WHERE ident='3.144.17.181' |
0.00039 | SELECT * FROM punbb_online WHERE logged<1732229008 |
0.00060 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26948 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00364 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26948 ORDER BY p.id LIMIT 0,25 |
0.00083 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26948 |
Total query time: 0.00738 s |