Ubuntu 16.04 Xenial Xerus
Ubuntu 12.04 Precise Pangolin
Gammu (GNU All Mobile Management Utilities) ist eine Bibliothek um Mobiltelefone (vornehmlich Nokia) anzusprechen. Es ist möglich über Bluetooth, Infrarot oder Kabel Verbindung zu einem Handy aufzunehmen und Daten zu bearbeiten. Fast alles kann editiert werden: Telefonbuch, SMS, Kalender, Aufgaben. Eine graphische Oberfläche bietet das Programm Wammu oder KMobileTools, in diesem Artikel wird auf die Kommandozeilenversion eingegangen.
Achtung: Mobiltelefone mit der Symbian 60 Series 3rd Edition werden von Gammu nicht unterstützt! Bei diesen Telefonen sollte besser auf die Software series60-remote zurückgegriffen werden, die diese Telefone unterstützt.
Gammu befindet sich in den offiziellen Ubuntu-Paketquellen und kann über die Paketverwaltung installiert [1] werden.
gammu (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install gammu
sudo aptitude install gammu
Vor der Konfiguration sollte man eine Verbindung mit dem Telefon vornehmen. Für Infrarot genügt das Aktivieren und Konfigurieren [2] der Infrarotverbindung im Handy und das Positionieren neben dem Infrarotanschluss am Rechner, Bluetooth muss ebenfalls aktiviert werden und das Handy gepaart werden [3], für eine Kabelverbindung muss dieses lediglich eingesteckt werden.
Die versteckte Konfigurationsdatei heißt .gammurc und befindet sich im Homeverzeichnis. Man öffnet sie einfach in einem Texteditor.[4] Der Minimalaufbau der Konfigurationsdatei ist unten beschrieben. Den exakten Aufbau erklärt Setting configuration file im Gammu Wiki. Hilfreich ist neben Connecting to phone im Gammu Wiki auch die Phone Database mit bekannten funktionierenden Konfigurationen.
[gammu] port=Bluetooth-Addresse oder Pfad zum Geräteanschluss connection=Verbindungstyp model=auto (hier auto stehen lassen außer das Gerät wird nicht erkannt) name=beliebiger Name
Man öffnet ein Terminal [5]. Um zu testen ob die Konfiguration funktioniert bietet sich folgender Befehl an:
gammu --identify
Gammu sollte sich verbinden und nach kurzer Zeit Information über das Handy anzeigen.
Folgender Skript-Einzeiler erlaubt das Versenden einer SMS durch direkten Aufruf im Terminal.[5] Der SMS-Text steht in "Anführungszeichen", --sendsms
ist die Funktion zum SMS verschicken, TEXT
ist ein Parameter für diese Funktion und 0123456789
ist die natürlich anzupassende Handy-Nummer des Empfängers.
echo "Hallo! Ich bin ein Gammu-Test." | gammu --sendsms TEXT 0123456789
Man öffnet ein Terminal [5]. Dann gibt man folgenden Befehl ein, um alle empfangenen SMS abzurufen:
gammu --getallsms
Mit folgendem Shell-Skript lässt ein Kalender von Computer auf das Handy übertragen.
1 2 3 4 5 6 7 | #!/bin/bash # Den Pfad zur Kalenderdatei im iCalendar-Format CALFILE=/home/Benutzer/Desktop/Privat.ics #Kalender und Aufgaben im Handy löschen, dann Kalenderdatei auf Gerät schreiben gammu --restore $CALFILE -yes |
Zwei hier vorgestellte Shell-Skripte sollen diesen Aufruf von Gammu etwas komfortabler gestalten. Das eine sendpersonalSMS.sh nimmt einfach einen Parameter der Form Name [069912346..]
und den Inhalt der SMS in einem zweiten Parameter, schickt die SMS mit Gammu und speichert sie zum Archivieren in einer im Code definierten Textdatei ab. Das zweite Skript sendmassSMS.sh ist zum Versenden von einer SMS an viele Leute. In einer Text-Datei wird pro Zeile eine Telefonnummer wieder im Format Name [069912346..]
angegeben und der Pfad zu dieser Datei wird als Parameter übergeben sowie der Inhalt der SMS.
Wenn der zweite Parameter (Inhalt der SMS) weg fällt, dann fragt das Script mit dem Tool Zenity in einem Dialog nach dem SMS-Inhalt. Absätze kann man dort leider keine Eingeben, aber sehr wohl aus der Zwischenablage einfügen (dh. SMS vorher in einem Editor schreiben).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #!/bin/bash # 2009-01-29 lumbricus # Script zum SMS-Versand mit Gammu # Syntax zum Aufruf ueber Aufruf mit Parameter --help # --- Parameter --- maxchars=600 # Maximale Laenge von SMS empfaenger=$1 # Pfad zur Datei mit den Nummern text=$2 # Text der per SMS versendet werden soll archivedatei='~/sent-with-gammu' # ------------------ # Bekannte Probleme: # - bei SMS mit mehr als $maxchars gibts vielleicht seltsame Effekte (abgeschnitten?) # - # Gib Hilfetext aus... if [ "$1" = '--help' ] || [ "$1" = "h" ] || [ "$1" = "help" ] then echo 'sendpersonalSMS v0.1 - 2009-01-29 PR sendpersonalSMS NUMMER [TEXT] NUMMER Emfpaenger-Nummer im Format: Name [0699123..] Achtung 0043699... geht nicht! es geht nur: +43699... oder 0699... TEXT Inhalt der SMS Wenn nicht angegeben, fragt ein Dialog nach dem Text. ' echo exit 0 fi # Wenn Parameter $nummer keine Telefonnummer ist... if ! (echo "$empfaenger"|egrep -q '\[[0-9+]+\]') then echo "Keine gueltige Telefonnummer uebergeben." echo "Mehr mit '--help'." echo exit 0 fi # Wenn Parameter 2 leer ist, , dh. kein Text zum verschicken, # frag nach dem Text... if [ -z "$text" ] then text=$(zenity --entry --title='Nachrichtentext eingeben' --text='Bitte Nachrichtentext eingeben:' --width=400) if [ -z "$text" ]; then echo 'Texteingabe und SMS-Versand abgebrochen.' echo exit fi fi echo "Versende die SMS, ${#text} Zeichen:" echo "$text" echo echo "Versende SMS an:" echo "$empfaenger" echo echo "Any key to continue or [Ctrl] + [C] to abort or '--help' for help." # Lies ein Zeichen ein... read -n 1 echo # Zum archivieren der SMS inklussive Ergebnis von gammu... #$(date +%F_%H.%M.%S) # SMS + Datum in Logfile schreiben... echo "[$(date '+%F %H:%M:%S')] -> $empfaenger" >> "$archivedatei" echo "$text" >> "$archivedatei" echo '------- Gammu-Result -------' >> "$archivedatei" nummer=$(echo "$empfaenger"|egrep -o '\[[0-9+]+\]'|egrep -o '[0-9+]+') # Verschicke die SMS... echo echo "$text"|gammu --sendsms TEXT $nummer -autolen $maxchars|tee -a "$archivedatei" echo '----------------------------' >> "$archivedatei" echo >> "$archivedatei" echo >> "$archivedatei" echo echo '...fertig!' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | #!/bin/bash # 2009-01-29 lumbricus # Script zum Massensms-Versand mit Gammu # Syntax zum Aufruf ueber Aufruf mit Parameter --help # --- Parameter --- maxchars=600 # Maximale Laenge von SMS delay=1 # Verzoegerung zwischen 2 versendeten SMS list=$1 # Pfad zur Datei mit den Nummern text=$2 # Text der per SMS versendet werden soll # ------------------ # Bekannte Probleme: # - bei SMS mit mehr als $maxchars gibts vielleicht seltsame Effekte (abgeschnitten?) # - # Gib Hilfetext aus... if [ "$1" = '--help' ] || [ "$1" = "h" ] || [ "$1" = "help" ] then echo 'sendmassSMS v0.1 - 2009-01-29 PR sendmassSMS NUMMERLISTE [TEXT] NUMMERLISTE Textdatei mit Liste der Emfpaenger-Nummern. Pro Zeile eine Nummer im Format: Name oder so [1234...] Alles hinter einem "#" ist Kommentar. Achtung: 0043699... geht nicht! es geht nur: +43699... oder 0699... TEXT Inhalt der SMS Wenn nicht angegeben, fragt ein Dialog nach dem Text. ' echo exit 0 fi # Wenn Parameter 1 keine lesbare Datei ist... if [ ! -r "$1" ] then echo "Keine gueltige Nummerndatei uebergeben." echo "Der erste Parameter beim Aufruf des Scripts muss der Pfad zu einer" echo "Textdatei sein, die Empfaengernummern enthaelt. Mehr mit '--help'." echo exit 0 fi # Wenn Parameter 2 leer ist, , dh. kein Text zum verschicken, # frag nach dem Text... if [ -z "$text" ] then text=$(zenity --entry --title='Nachrichtentext eingeben' --text='Bitte Nachrichtentext eingeben:' --width=400) # fuer weiter Versionen des Scripts: # Vorbelegung des Wertes mit --entry-text=asdf moeglich # so koennte ein Template vorgeschlagen werden, das auch in der Datei mit der # Nummerliste steht. if [ -z "$text" ];then echo 'Texteingabe und SMS-Versand ohne Aenderungen und Versand abgebrochen.' echo exit fi fi echo "Versende die SMS, ${#text} Zeichen:" echo "$text" echo echo "Versende SMS an:" egrep -o '^[^#]*' $list echo echo "Any key to continue or [Ctrl] + [C] to abort or '--help' for help." # Lies ein Zeichen ein... read -n 1 echo # For-Schleife ginge auch, geht aber nicht Zeilen sondern Woerter durch... # -> fuehrt nicht zu erwuenschtem Ergebnis. #for empfaenger in `egrep -o '^[^#]*' list`; do #do # echo $empfaenger #done # Zum archivieren der SMS inklussive Ergebnis von gammu... logfilename=$list$(date +%F_%H.%M.%S) # SMS + Datum in Logfile schreiben... echo "[$(date '+%F %H:%M:%S')]" > "$logfilename" echo "$text" >> "$logfilename" echo '---' >> "$logfilename" i=1 numberofsms=$(egrep -o '^[^#]*' $list|egrep -o '\[[0-9+]*\]'|egrep -o '[0-9+]*'|wc -l) # Gehe die Textdatei $list Zeilweise durch, wobei alles nach '#' # entfernt wird (Kommentar) und dann leere Zeilen nicht mehr dabei sind. # Jeweils eine solche Kommentarbereinigte Zeile steht in $empfaenger... egrep -o '^[^#]*' $list|while read empfaenger; do # Finde die Nummer in [ ] und speichere nachher nur die Nummer ohne [ ] nummer=$(echo $empfaenger|egrep -o '\[[0-9+]*\]'|egrep -o '[0-9+]*') # Wenn die $nummer nicht leer ist nach Entfernung von ungueltigen Zeichen # verschicke die SMS... if [ ! -z "$nummer" ]; then echo |tee -a $logfilename echo "Sende an $empfaenger... (Empfaenger $i von $numberofsms)"|tee -a "$logfilename" # Damit das Handy sich nicht ueberanstrengt... ;) # (Und man auch eine Chance bekommt abzubrechen) sleep $delay echo "$text"|gammu --sendsms TEXT $nummer -autolen $maxchars|tee -a "$logfilename" i=$(($i+1)) fi done echo echo '...fertig!' |
Diese Revision wurde am 1. Februar 2017 13:02 von AdrianB erstellt.