» »

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:
#!/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?

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:

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


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…

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.

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

Icematxyz ::

Slučajno tukaj:

/etc/sysconfig/gpsd

WarpedGone ::

Hecno. Ne, tut etc/sysconfig/gpsd ne obstaja, obstaja pa /etc/conf.d/gpsd z vsebino:
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.
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…

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
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!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Programiranje Baofeng BF-V9

Oddelek: Elektrotehnika in elektronika
184279 (2795) hipertija
»

Zaznavanje Arduina priklopljenega preko USB v Linuxu

Oddelek: Programiranje
211610 (1104) mojster_joni
»

linux - pipe - čudno obnašanje

Oddelek: Operacijski sistemi
161011 (709) slovencl
»

Ubuntu

Oddelek: Operacijski sistemi
303048 (397) Tear_DR0P
»

c++, linux in hardware

Oddelek: Programiranje
61070 (967) CCfly

Več podobnih tem