Forum » Programiranje » Linux/KDE - shell scripta
Linux/KDE - shell scripta
WarpedGone ::
Situacija:
- USB GPS dongle
- navigacijski program, ki deluje pod Wine emulacijo
- Linux Pardus (KDE)
Problem:
Stvar deluje ™ vendar pred vsakim zagonom potrebuje nekaj fidlanja v terminalu.
Želja je, da se to fidlanje zapakira v skripto, ki opravi vse potrebno in da se navigacija štarta v delujočem stanju.
Podproblemi katere je potrebno ustrezno upoštevat oz. gradniki tega fidlanja:
- ko vštekam usb v kompjuter, se avtomatsko štarta gpsd in napravo preklopi v binarni protokol
- navigacija ne razume najbolje tega binarnega Sirf2 protokola (satelite najde, čas tudi, lokacija pa je na 0.0), zato je nujen preklop GPS dongla v NMEA protokol
- preklop v NMEA je možen le, če gpsd ni pognan
- ob vsakem naslednjem izšteku/všteku se USB zmapira na drug port (ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3 in nato zopet ttyUSB0, ...)
- avtomatsko iskanje com porta v navigaciji ne uspe, potrebno ji je povedat kje naj posluša
- zgornja dva problema skupaj pomenita, da je potrebno stuhtat kako različne ttyUSBx vedno simbolično polinkat na com1, kar navigacija posluša
Trenutna skripta, ki deluje, če jo poženem iz terminala, je takšna:
Predvidevam, da je v mašino vkuplana samo ena USB naprava, ki se pogovarja preko serijskega porta. Za moje potrebe je to OK.
Najprej fentam gpsd, da neha blokirat GPS sprejemnik, nato pa nad štirimi možnimi ttyUSB kličem preklop v NMEA. Uspelo bo to, kar obstaja, kar ne obstaja ignoriram.
Nato fentam morebiten obstoječ link za com1 in probam nardit novga. Tuki sm predvideval da bo pač uspel tisti, kjer dejansko ttyUSBx obstaja ampak sm ravno pogruntal da ni tako. Link se postavi iz ttyUSB0 na com1, čeprav ttyUSB0 ne obstaja. Nato pa noče več nardit linka iz ttyUSB1, ker tak že obstaja.
Dodaten problem je še tisti nujen sudo killall na začetku. Idealka bi bila, če bi se lahko nekak izognu klofanju passworda ob vsakem vštekavanju GPS naprave. Ko si samo na touchscreenu v avtu je vpisovanje gesla no-go.
Nočem posegat v obstoječo konfiguracijo sistema, ker želim da je stvar karseda prenosiljiva na druge sisteme - i.e. vse potrebno se naj nardi v tej skripti - kakšna dodatna konfiguracija, da se recimo gpsd kako drugače štarta al pa sploh ne - odpade.
To pomeni da odpade prčkanje po sistemskih nastavitvah. Poskus, da odinštaliram gpsd je rezultiral v tem, da mi je iz mašine odmontiral cel KDE in sm ga moral na novo inštalirat preko twm. Pustmo globino modrosti odvisnosti celotnega KDE od nameščenega gps deamona...
Skratka:
1. kako fentat gpsd brez nujnega vpisovanja gesla vsakič znova
2. kako avtomatsko postavit simbolični link iz com1 le na obstoječ /dev/ttyUSBx
3. kako dosečt da skripta deluje enako, ne glede na to ali je pognana iz terminala ali pa se požene iz launcher widgeta v KDE4.7
Hvala za konstruktivne predloge.
- USB GPS dongle
- navigacijski program, ki deluje pod Wine emulacijo
- Linux Pardus (KDE)
Problem:
Stvar deluje ™ vendar pred vsakim zagonom potrebuje nekaj fidlanja v terminalu.
Želja je, da se to fidlanje zapakira v skripto, ki opravi vse potrebno in da se navigacija štarta v delujočem stanju.
Podproblemi katere je potrebno ustrezno upoštevat oz. gradniki tega fidlanja:
- ko vštekam usb v kompjuter, se avtomatsko štarta gpsd in napravo preklopi v binarni protokol
- navigacija ne razume najbolje tega binarnega Sirf2 protokola (satelite najde, čas tudi, lokacija pa je na 0.0), zato je nujen preklop GPS dongla v NMEA protokol
- preklop v NMEA je možen le, če gpsd ni pognan
- ob vsakem naslednjem izšteku/všteku se USB zmapira na drug port (ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3 in nato zopet ttyUSB0, ...)
- avtomatsko iskanje com porta v navigaciji ne uspe, potrebno ji je povedat kje naj posluša
- zgornja dva problema skupaj pomenita, da je potrebno stuhtat kako različne ttyUSBx vedno simbolično polinkat na com1, kar navigacija posluša
Trenutna skripta, ki deluje, če jo poženem iz terminala, je takšna:
#!/bin/bash clear sudo killall gpsd gpsctl -n /dev/ttyUSB0 gpsctl -n /dev/ttyUSB1 gpsctl -n /dev/ttyUSB2 gpsctl -n /dev/ttyUSB3 cd /home/juzer/.wine/dosdevices unlink com1 ln -s /dev/ttyUSB0 com1 ln -s /dev/ttyUSB1 com1 ln -s /dev/ttyUSB2 com1 ln -s /dev/ttyUSB3 com1 cd /home/juzer/navigacija wine navigacija.exe
Predvidevam, da je v mašino vkuplana samo ena USB naprava, ki se pogovarja preko serijskega porta. Za moje potrebe je to OK.
Najprej fentam gpsd, da neha blokirat GPS sprejemnik, nato pa nad štirimi možnimi ttyUSB kličem preklop v NMEA. Uspelo bo to, kar obstaja, kar ne obstaja ignoriram.
Nato fentam morebiten obstoječ link za com1 in probam nardit novga. Tuki sm predvideval da bo pač uspel tisti, kjer dejansko ttyUSBx obstaja ampak sm ravno pogruntal da ni tako. Link se postavi iz ttyUSB0 na com1, čeprav ttyUSB0 ne obstaja. Nato pa noče več nardit linka iz ttyUSB1, ker tak že obstaja.
Dodaten problem je še tisti nujen sudo killall na začetku. Idealka bi bila, če bi se lahko nekak izognu klofanju passworda ob vsakem vštekavanju GPS naprave. Ko si samo na touchscreenu v avtu je vpisovanje gesla no-go.
Nočem posegat v obstoječo konfiguracijo sistema, ker želim da je stvar karseda prenosiljiva na druge sisteme - i.e. vse potrebno se naj nardi v tej skripti - kakšna dodatna konfiguracija, da se recimo gpsd kako drugače štarta al pa sploh ne - odpade.
To pomeni da odpade prčkanje po sistemskih nastavitvah. Poskus, da odinštaliram gpsd je rezultiral v tem, da mi je iz mašine odmontiral cel KDE in sm ga moral na novo inštalirat preko twm. Pustmo globino modrosti odvisnosti celotnega KDE od nameščenega gps deamona...
Skratka:
1. kako fentat gpsd brez nujnega vpisovanja gesla vsakič znova
2. kako avtomatsko postavit simbolični link iz com1 le na obstoječ /dev/ttyUSBx
3. kako dosečt da skripta deluje enako, ne glede na to ali je pognana iz terminala ali pa se požene iz launcher widgeta v KDE4.7
Hvala za konstruktivne predloge.
Zbogom in hvala za vse ribe
jype ::
WarpedOne> 1. kako fentat gpsd brez nujnega vpisovanja gesla vsakič znova
man sudoers (ne tega gledat, raje zgooglaj primere sudoers pravil na netu)
WarpedOne> 2. kako avtomatsko postavit simbolični link iz com1 le na obstoječ /dev/ttyUSBx
udev rule za USB napravo
ukaza
udevadm info -q all -n /dev/ttyUSB0
in
udevadm monitor
ti bosta pomagala
WarpedOne> 3. kako dosečt da skripta deluje enako, ne glede na to ali je pognana iz terminala ali pa se požene iz launcher widgeta v KDE4.7
kaj se pa zgodi drugače?
aja, morda ni enako nastavljen DISPLAY?
man sudoers (ne tega gledat, raje zgooglaj primere sudoers pravil na netu)
WarpedOne> 2. kako avtomatsko postavit simbolični link iz com1 le na obstoječ /dev/ttyUSBx
udev rule za USB napravo
ukaza
udevadm info -q all -n /dev/ttyUSB0
in
udevadm monitor
ti bosta pomagala
WarpedOne> 3. kako dosečt da skripta deluje enako, ne glede na to ali je pognana iz terminala ali pa se požene iz launcher widgeta v KDE4.7
kaj se pa zgodi drugače?
aja, morda ni enako nastavljen DISPLAY?
misek ::
Naredi si USB hotplug skripto za to napravo. Potem se bo avtomatsko vse pognalo, ko priključiš napravo, in ni potrebno na roke poganjati te skripte.
jype ::
Jaz imam tako urejen strežnik, v katerega tlačim različne vrste spominskih medijev, da mi avtomagično pobere dol fotografske in video posnetke. Obnese se odlično.
WarpedGone ::
Hvala za predloge, medtem sem uspel par zadev rešit:
Ugotovil sem, da tole ni nujno potrebno. gpsd zna tudi sam napravo preklopit v NMEA način z ukazom gpsd -n /dev/tty0.
Prime tudi simbolični link iz com1, katerega potrebujem zaradi wine (gpsd -n com1). Pa še sudo ni potreben in ni vpisovanja gesla. Najs(tm)
Pobrskal sem po manualu za bash in odkril sintakso:
Najs(tm).
jype:
Ko sm štartal zadevo konzoli, je trajalo par sekund, da se je prebil čez vse ukaze (da potečejo timeouti...) in šele nato štartal navigacijo, ki je delovala. Posamezni ukazi so bili zaporedni - npr. sudo je zablokiral izvajanje dokler ni dobil gesla. Pri štartu iz widgeta, ni bilo kverija po passwordu - razumem da terminalski sudo tuki ne pride skozi, nism pa še našel GUI alternative. Tut navigacija se je štartala praktično takoj in seveda ni delovala, ker predpogoji niso bili poštimani.
To je blo prej. Po novem pa še ugotavlam, enkrat se ni hotlo prav postavit ampak nekak ne uspem ponovit tega problema. Tut vedno znova se stvar postavi na ttyUSB0. Tut če vmes fentam gpsd in vštekam v drugo lukno, se postavi na 0 in prav inicializira zadevo. V pomanjkanju konkretnega opisa problema bom razlglasil da zadeva dela zadovoljvivo dobro i.e. čist.
Če bo kdo mel čudne težave s temi USB GPS sprejemniki, ko celo v priloženem programu zadeva ne dela, zna bit problem v tem komunikacijskem protokolu. Ne razumejo vsi programi vse te jezike, kak vmesni posrednik pa nardi še kak nepredvidljiv korak in si prepričan da je stvar crknila in pošiljaš nazaj v trgovino ...
1. kako fentat gpsd brez nujnega vpisovanja gesla vsakič znova
Ugotovil sem, da tole ni nujno potrebno. gpsd zna tudi sam napravo preklopit v NMEA način z ukazom gpsd -n /dev/tty0.
Prime tudi simbolični link iz com1, katerega potrebujem zaradi wine (gpsd -n com1). Pa še sudo ni potreben in ni vpisovanja gesla. Najs(tm)
2. kako avtomatsko postavit simbolični link iz com1 le na obstoječ /dev/ttyUSBx
Pobrskal sem po manualu za bash in odkril sintakso:
if [ -e /dev/ttyUSB0 ]; then ln -s /dev/ttyUSB0 com1 fi
Najs(tm).
3. kako dosečt da skripta deluje enako, ne glede na to ali je pognana iz terminala ali pa se požene iz launcher widgeta v KDE4.7
jype:
kaj se pa zgodi drugače?
Ko sm štartal zadevo konzoli, je trajalo par sekund, da se je prebil čez vse ukaze (da potečejo timeouti...) in šele nato štartal navigacijo, ki je delovala. Posamezni ukazi so bili zaporedni - npr. sudo je zablokiral izvajanje dokler ni dobil gesla. Pri štartu iz widgeta, ni bilo kverija po passwordu - razumem da terminalski sudo tuki ne pride skozi, nism pa še našel GUI alternative. Tut navigacija se je štartala praktično takoj in seveda ni delovala, ker predpogoji niso bili poštimani.
To je blo prej. Po novem pa še ugotavlam, enkrat se ni hotlo prav postavit ampak nekak ne uspem ponovit tega problema. Tut vedno znova se stvar postavi na ttyUSB0. Tut če vmes fentam gpsd in vštekam v drugo lukno, se postavi na 0 in prav inicializira zadevo. V pomanjkanju konkretnega opisa problema bom razlglasil da zadeva dela zadovoljvivo dobro i.e. čist.
Če bo kdo mel čudne težave s temi USB GPS sprejemniki, ko celo v priloženem programu zadeva ne dela, zna bit problem v tem komunikacijskem protokolu. Ne razumejo vsi programi vse te jezike, kak vmesni posrednik pa nardi še kak nepredvidljiv korak in si prepričan da je stvar crknila in pošiljaš nazaj v trgovino ...
Zbogom in hvala za vse ribe
WarpedGone ::
Ne dela še OK. Po rebootu cele mašine gpsd -n noče več preklopit v NMEA način.
Ne javi nobene napake, tiho požre ukaz, preklopa pa ni. Ne pomaga niti killall gpsd in ponovni štart, ne pomaga tudi ne sudo gpsd -n.
Ne v terminalu, ne iz plasmoida (al kak se pač reče tej zadevi v 4.7).
Kaka ideja?
Deluje pa stari:
killall gpsd
gpsctl -n
Stvari se že avtomatsko poženejo, problem je da je gpsd preveč pameten in avtomatsko preklopi v Sirf2, js bi nucu da ostane v NMEA.
Ne javi nobene napake, tiho požre ukaz, preklopa pa ni. Ne pomaga niti killall gpsd in ponovni štart, ne pomaga tudi ne sudo gpsd -n.
Ne v terminalu, ne iz plasmoida (al kak se pač reče tej zadevi v 4.7).
Kaka ideja?
Deluje pa stari:
killall gpsd
gpsctl -n
Naredi si USB hotplug skripto za to napravo. Potem se bo avtomatsko vse pognalo, ko priključiš napravo, in ni potrebno na roke poganjati te skripte.
Stvari se že avtomatsko poženejo, problem je da je gpsd preveč pameten in avtomatsko preklopi v Sirf2, js bi nucu da ostane v NMEA.
Zbogom in hvala za vse ribe
Zgodovina sprememb…
- spremenilo: WarpedGone ()
Icematxyz ::
Glej ga glej pisca Linux skript.
Drugače si pa pravilno ugotovil, uporabiš stikalo -n in to je to. Na Ubuntu:
sudo dpkg-reconfigure gpsd
Vse pustiš na privzetih nastavitvah razen vpišeš pri ustreznem vprašanju v polje stikalo -n. Na Pardus morda preveri, če se te nastavitve nahajajo tukaj:
cat /etc/default/gpsd
Če se, dopiši ročno stikalo -n in znova zaženi računalnik.
Drugače si pa pravilno ugotovil, uporabiš stikalo -n in to je to. Na Ubuntu:
sudo dpkg-reconfigure gpsd
Vse pustiš na privzetih nastavitvah razen vpišeš pri ustreznem vprašanju v polje stikalo -n. Na Pardus morda preveri, če se te nastavitve nahajajo tukaj:
cat /etc/default/gpsd
Če se, dopiši ročno stikalo -n in znova zaženi računalnik.
WarpedGone ::
cat /etc/default/gpsd
Ne, po defaultu tega fila/direktorija ni. Brskam, če je kje drugje kej podobnega.
Zbogom in hvala za vse ribe
WarpedGone ::
Hecno. Ne, tut etc/sysconfig/gpsd ne obstaja, obstaja pa /etc/conf.d/gpsd z vsebino:
A to morda pomeni, da je že nastavljeno da bi moral preklopit v -n po defaultu pa iz nekega razloga ne?
OPTIONS = "-n" DEVICE="/dev/ttyUSB0"
A to morda pomeni, da je že nastavljeno da bi moral preklopit v -n po defaultu pa iz nekega razloga ne?
Zbogom in hvala za vse ribe
WarpedGone ::
Tale Options ne bo zadoščal.
Fentam GPSD in ga poženem kot gpsd -n, pa vseeno preklopi v Sirf. Bi upal trdit, da se natanko enako zgodi tudi ob bootu. Sm pobrskal po skriptah, če ne najde etc/default/gpsd vzame etc/conf.d/gpsd kjer pa je že "-n" v OPTIONS.
Bo treba it po prvotni poti in scoprat način, da se lahko gpsd ubije brez vpisovanja gesla. Sudoers torej.
Fentam GPSD in ga poženem kot gpsd -n, pa vseeno preklopi v Sirf. Bi upal trdit, da se natanko enako zgodi tudi ob bootu. Sm pobrskal po skriptah, če ne najde etc/default/gpsd vzame etc/conf.d/gpsd kjer pa je že "-n" v OPTIONS.
Bo treba it po prvotni poti in scoprat način, da se lahko gpsd ubije brez vpisovanja gesla. Sudoers torej.
Zbogom in hvala za vse ribe
Icematxyz ::
Bo treba it po prvotni poti in scoprat način, da se lahko gpsd ubije brez vpisovanja gesla. Sudoers torej.
Poskusi sledeče v /etc/conf.d/gpsd na začetek prilepi:
START_DAEMON="false"
In znova zaženi računalnik.
Zgodovina sprememb…
- spremenil: Icematxyz ()
WarpedGone ::
Zgleda da čist brez gpsd zadeva ne špila - kaže koordinate 0,0, kljub temu da ga gpsctl preklopi v NMEA.
Ko sm pognal gpsd in ga takoj fental, pa je začelo kazat koordinate. Bom tale start_daemon = "false" odstranil in probal znova.
V sudoers sm dodal
Ukaz sudo killall gpsd sedaj ne zahteva več gesla. jype, hvala za namig.
Ko sm pognal gpsd in ga takoj fental, pa je začelo kazat koordinate. Bom tale start_daemon = "false" odstranil in probal znova.
V sudoers sm dodal
juzer masina=NOPASSWD: /usr/bin/killall
Ukaz sudo killall gpsd sedaj ne zahteva več gesla. jype, hvala za namig.
Zbogom in hvala za vse ribe
Icematxyz ::
In pa še ena opcija morda za test. Pustiš, da se gpsd samodejno zažene ob zagonu, ampak najprej izvedeš sledeče:
sudo killall gpsd
gpsctl -n /dev/ttyUSB0
Preveriš, da naprava zagotovo uporablja NMEA protokol!
Potem spremeniš privzete nastavitve:
OPTIONS = "-n"
DEVICE="/dev/ttyUSB0"
In dodaš stikalo -b:
OPTIONS = "-b -n"
DEVICE="/dev/ttyUSB0"
In znova zaženeš računalnik!
sudo killall gpsd
gpsctl -n /dev/ttyUSB0
Preveriš, da naprava zagotovo uporablja NMEA protokol!
Potem spremeniš privzete nastavitve:
OPTIONS = "-n"
DEVICE="/dev/ttyUSB0"
In dodaš stikalo -b:
OPTIONS = "-b -n"
DEVICE="/dev/ttyUSB0"
In znova zaženeš računalnik!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Programiranje Baofeng BF-V9Oddelek: Elektrotehnika in elektronika | 4243 (2759) | hipertija |
» | Zaznavanje Arduina priklopljenega preko USB v LinuxuOddelek: Programiranje | 1598 (1092) | mojster_joni |
» | linux - pipe - čudno obnašanjeOddelek: Operacijski sistemi | 1000 (698) | slovencl |
» | UbuntuOddelek: Operacijski sistemi | 3033 (382) | Tear_DR0P |
» | c++, linux in hardwareOddelek: Programiranje | 1059 (956) | CCfly |