April 30, 2013

Connecting Android to Linux using MTP

Among the features those were lost during the upgrade from Ice Cream Sandwich to Jelly Bean, the one which I miss most was USB Mass Storage mode. It was the preferred method to backup the files from the Tab and sync the e-books to the Tab from Calibre Library. Calibre was pretty fast to provide support for MTP and syncing e-books were back to normal real soon.

However I was missing the USB mass storage mode as I could not access the files in the tab from the Linux command line for backing up the files. Finally I managed to get it working using mtpfs. The configuration was pretty straight forward but I could not get it work reliably. Most of the time I used to get the message "Transport endpoint is not connected" when trying to access the Tab from the command line. Finally found that mtpfs was crashing with core dump. Looks like the mtpfs for Fedora is broken. Even compiling the latest sources didn't help. Finally managed to get things going using go-mtpfs.

If you are trying to get mtpfs working in Fedora, try go-mtpfs : https://github.com/hanwen/go-mtpfs
Binaries of go-mtpfs are here : http://hanwen.home.xs4all.nl/public/software/go-mtpfs/

April 10, 2013

rsync ഉപയോഗിച്ചുള്ള ഡാറ്റാ ബാക്കപ്

നിങ്ങളുടെ ഡാറ്റയുടെ ബാക്കപ് എടുക്കണമെന്ന് ആഗ്രഹമുണ്ടോ? നിങ്ങൾ പതിവായി ഡാറ്റാ ബാക്കപ് ചെയ്യാറുണ്ടോ? എപ്പോഴെങ്കിലും കമ്പ്യൂട്ടറിന്റെയോ, ഡിസ്കിന്റെയോ തകരാർ കാരണം വിലപിടിച്ച ഡാറ്റാ നഷ്ടപെട്ടിട്ടുണ്ടോ? ഈ ചോദ്യങ്ങളിൽ ഒന്നിനെങ്കിലും അതെ എന്നാണ് നിങ്ങളുടെ ഉത്തരമെങ്കിൽ തുടർന്നു വായിക്കുക. എക്സ്റ്റേണൽ ഡ്രൈവൊക്കെ വാങ്ങി ബാക്കപ്പെടുക്കുന്നതൊക്കെ ചെലവുള്ള പണിയാണെന്നു വിചാരിക്കുന്നവരോട് ഒരു ചോദ്യം കൂടി - നിങ്ങളുടെ ഡാറ്റയാണോ എക്സ്റ്റേണൽ ഡ്രൈവാണോ കൂടുതൽ വിലപിടിച്ചത്?

ഡയറക്ടറികളും ഫയലുകളും മറ്റൊരു സ്ഥലത്തേക്ക് synchronize ചെയ്യുന്ന ഒരു പ്രോഗ്രാമാണ് rsync. മറ്റൊരു സ്ഥലമെന്നത് ഒരേ സിസ്റ്റത്തിലെ വ്യത്യസ്ത ഡയറക്ടറികളോ, രണ്ടു സിസ്റ്റങ്ങളിലെ ഡയറക്ടറികളോ തമ്മിലാകാം. rsync ഉപയോഗിച്ച്, സിസ്റ്റത്തിൽ ചേർത്തിട്ടുള്ള എക്സ്റ്റേണൽ ഡ്രൈവിലേക്ക് ഡാറ്റാ ബാക്കപ്പെടുക്കുന്നത് എങ്ങനെ എന്നാണ് ഈ പോസ്റ്റിൽ വിശദീകരിക്കുന്നത്.

/home/prime/data  എന്ന ഡയറക്ടറിയും അതിലെ ഉള്ളടക്കവും  /externaldrive/backup എന്ന ഡയറക്ടറിയിലേക്ക് ബാക്കപ്പെടുക്കുന്നത് എങ്ങനെ എന്നു നോക്കാം.

rsync -a /home/prime/data  /externaldrive/backup എന്ന കമാന്റ് റൺ ചെയ്താൽ ഡാറ്റ മുഴുവൻ /externaldrive/backup എന്ന ഡയറക്ടറിയിൽ എത്തിയിട്ടുണ്ടാകും. കുഴപ്പമൊന്നുമില്ലെങ്കിൽ ഈ കമാന്റ് നിശബ്ദമായി ഫയലുകൾ ലക്ഷ്യസ്ഥാനത്തേക്ക് പകർത്തും.  -a എന്നത് ആർക്കൈവ് മോഡിൽ ഡേറ്റാ പകർത്തുന്നതിനാണ്.  വളരെയധികം ഫയലുകൾ പകർത്തുമ്പോൾ rsync കുറച്ചധികം സമയമെടുത്തേക്കും. അപ്പോൾ rsync എന്താണ് ചെയ്യുന്നതെന്നറിയാൻ -v എന്ന കമാന്റ് ലൈൻ പരാമീറ്റർ കൊടുത്താൽ മതിയാകും.

rsync -av /home/prime/data  /externaldrive/backup  ഇപ്പോൾ ഫയലുകൾ പകർത്തുന്ന മുറയ്ക്ക് അവയെകുറിച്ചുള്ള വിവരങ്ങൾ rsync ടെമിനലിലേക്ക് എഴുതും.
rsync -av /home/prime/data  /externaldrive/backup > backup.log 2>&1 എന്നാക്കിയാൽ മെസ്സേജുകൾ backup.log എന്ന ഫയലിലേക്ക് എഴുതും.

rsync ആദ്യം ഒരു ഡയറക്ടറിയുടെ ബാക്കപ്പെടുക്കുമ്പോൾ കുറച്ചധികം സമയമെടുക്കും. പിന്നീടുള്ള ബാക്കപ്പുകളിൽ പുതിയ ഫയലുകളും മാറ്റമുള്ള ഫയലുകളും മാത്രം പകർത്തുമെന്നതിനാൽ കൂടുതൽ വേഗത്തിൽ ബാക്കപ് നടക്കും. പുതിയ ഫയലുകളും മാറ്റമുള്ള ഫയലുകളും  rsync തന്നെ കണ്ടുപിടിക്കുമെന്നതിനാൽ യൂസറിന് അതിനെക്കുറിച്ചാലോചിച്ച് ബുദ്ധിമുട്ടേണ്ടതില്ല. ഈ തരത്തിൽ ബാക്കപ്പെടുക്കുമ്പോൾ മാറിയ ഫയലുകൾ ലക്ഷ്യസ്ഥാനത്തുള്ള ഫയലുകളെ മാറ്റുമെന്നതിനാൽ മാറ്റങ്ങളും  പകർത്തപ്പെടും. ഉദാഹരണത്തിന് ബിരിയാണി എന്ന ഫയലിൽ പത്ത് വരികൾ ഉണ്ടായിരുന്നെന്നു കരുതുക. ആദ്യത്തെ ബാക്കപ്പിനു ശേഷം അബദ്ധവശാൽ അതിലെ നാലു വരികൾ മായ്കക്കപ്പെട്ടു എന്നു കരുതുക. അടുത്ത പ്രാവശ്യം rsync ചെയ്യുമ്പോൾ ലക്ഷ്യസ്ഥാനത്തിലെ പത്തു വരിയുള്ള ബിരിയാണി ആറു വരികളുള്ള ബിരിയാണിയായി മാറും. --backup, --backup-dir --suffix എന്നീ ഓപ്ഷനുകളുപയോഗിച്ച് താഴെ പറയുന്ന രീതിയിൽ ഈ പ്രശ്നം ഒരു പരിധിവരെ പരിഹരിക്കാവുന്നതാണ്.

rsync -av --backup --backup-dir=/externaldrive/changes --suffix=.bkup /home/prime/data  /externaldrive/backup

ഇപ്പോൾ മാറ്റമുള്ള ഫയലുകളുടെ പഴയ കോപ്പികൾ /externaldrive/changes എന്ന ഡയറക്ടറിയിൽ .bkup എന്ന എക്സ്റ്റൻഷനോടെ  ഉണ്ടാകും. changes ഡയറക്ടറിയുടെ ഘടന /home/prime/data എന്ന ഡയറക്ടറിയുടേതു പോലെ ആയിരിക്കും. നേരത്തേ പറഞ്ഞ നമ്മുടെ ബിരിയാണി ഫയൽ /home/prime/data/recipe/biriyani എന്നാണെങ്കിൽ ആറുവരിയുള്ള പുതിയ ബിരിയാണി ഫയൽ  /externaldrive/backup/data/recipe/biriyani ആയും  /externaldrive/backup/data/recipe/biriyani ഇൽ നേരത്തേ ഉണ്ടായിരുന്ന പത്തു വരി ബിരിയാണി  /externaldrive/changes/data/recipe/biriyani.bkup എന്ന പേരിലും ഉണ്ടാകും. ഓരോ തവണയും suffix .bkup എന്നായതിനാൽ /externaldrive/changes ഡയറക്ടറിയിൽ തൊട്ടുമുമ്പത്തെ വെർഷൻ മാത്രമേ ഉണ്ടാകൂ. .bkup എന്നതിനു പകരം ഡേറ്റും സമയവും   --suffix ആയി ഉപയോഗിച്ചാൽ എല്ലാ വെർഷനും കിട്ടും.

rsync -av --backup --backup-dir=/externaldrive/changes --suffix= .bkup.`date "+%Y%m%d%H%M%S"` /home/prime/data  /externaldrive/backup

ഇപ്പോൾ ബാക്കപ്പുകൾക്ക് .bkup.YYYYMMDDHHMISS എന്ന രീതിയിൽ എക്സ്റ്റൻഷനുണ്ടാകും.

വെവ്വേറെ ഡയറക്ടറികളുടെ ബാക്കപ്പെടുക്കാൻ ഡയറക്ടറികളുടെ പേരു മാറ്റി rsync റൺ ചെയ്താൽ മതിയാകും. ഇനി ഇതെല്ലാം കൂടി ഒരു ഫയലിലാക്കി കിട്ടിയാൽ കൊള്ളാമെന്നുണ്ടെങ്കിൽ ചെറിയ വ്യത്യാസങ്ങളോടു കൂടി backupScript.sh എന്ന പേരിൽ സംഭവം ഇവിടെ (http://goo.gl/rUdqe) ഉണ്ട്[1].  പല ഡയറക്ടറികൾ സപ്പോർട്ട് ചെയ്യാനായി വിവരങ്ങൾ ഒരു പ്രൊഫൈൽ ഫയലിൽ നിന്ന് റീഡ് ചെയ്യുന്നു. പല ഡിസ്കുകൾക്കായി വെവ്വേറെ പ്രൊഫൈൽ ഫയലുകൾ ഉണ്ടാക്കാവുന്നതാണ്. ഒരു സാമ്പിൾ ഫയൽ extDrive.profile എന്ന പേരിൽ ഇവിടെയുണ്ട് : http://goo.gl/zewX7

സ്ക്രിപ്റ്റ് റൺ ചെയ്യുന്ന വിധം.
1. സ്ക്രിപ്റ്റും സാമ്പിൾ പ്രൊഫൈലും ഡൗൺലോഡ് ചെയ്യുക.
2. chmod u+x backupScript.sh എന്നു കമാന്റ് റൺ ചെയ്യുക. സ്ക്രിപ്റ്റ് ഫയലിന്  എക്സിക്യൂട്ട് പെർമിഷൻ കൊടുക്കാനാണിത്.
3. ഏതെങ്കിലും ടെക്സ്റ്റ് എഡിറ്റർ ഉപയോഗിച്ച് സാമ്പിൾ പ്രൊഫൈലിൽ (extDrive.profile) ആവശ്യം വേണ്ട മാറ്റം വരുത്തുക.
    അ. CTRL|backupdir|/externaldrive/changes എന്ന ലൈനിലെ /externaldrive/changes എന്ന പഴയ വെർഷനുകൾ സൂക്ഷിക്കുന്ന ഡയറക്ടറിയുടെ പേര് നിങ്ങളുടെ ആവശ്യാനുസരണം മാറ്റുക.
    ആ. /home/user/data|/externaldrive/bkup എന്ന ലൈനിൽ ആദ്യത്തെ ഡയറക്ടറി ബാക്കപ്പെടുക്കേണ്ട ഡയറക്ടറിയാണ്. രണ്ടാമത്തേത് ലക്ഷ്യസ്ഥാനവും. ഇതു രണ്ടും തമ്മിൽ വേർതിരിക്കുന്നത് പൈപ്പ് (|) ഉപയോഗിച്ചാണ്. പൈപ്പ് ഇല്ലെങ്കിൽ സ്ക്രിപ്റ്റ് ശരിയായി പ്രവർത്തിക്കില്ല.
    ഇ. കൂടുതൽ ഡയറക്ടറികൾ ബാക്കപ്പെടുക്കണമെങ്കിൽ കൂടുതൽ ലൈനുകൾ ചേർക്കാവുന്നതാണ്.
    ഈ. ലൈനുകൾ കമന്റു ചെയ്യാൻ ലൈനിന്റെ ആദ്യം # ചേർത്താൽ മതി.
4. backupScript.sh extDrive.profile എന്നു ടെർമിനലിൽ റൺ ചെയ്യുക.

[1] rsyncഉം  ഈ സ്ക്രിപ്റ്റിന്റെ മുൻഗാമികളും  കാരണമാണ് രണ്ടു പ്രാവശ്യം ലാപ്ടോപ് അടിച്ചു പോയിട്ടും, പല പ്രാവശ്യം എക്സ്റ്റേണൽ/ഇന്റെണൽ ഡ്രൈവുകൾ കുളമാ(ക്കി)യിട്ടും എന്റെ ഡാറ്റ സുരക്ഷിതമായിരിക്കുന്നതെന്ന് നന്ദിപൂർവം സ്മരിച്ചുകൊള്ളുന്നു.

April 8, 2013

സമയം കൊല്ലൽ കമാന്റുകൾ

കഴിഞ്ഞ ചില പോസ്റ്റുകളിലായി ലിനക്സ് പരീക്ഷിച്ചു നോക്കാനുള്ള രീതികളെ കുറിച്ചു  എഴുതിയിരുന്നല്ലോ, ഇനി ഒന്നു രണ്ട് ചെറിയ കമാന്റുകൾ ടെർമിനലിൽ ചെയ്തു നോക്കാം
ആദ്യത്തേത് ബാനർ (banner) കമാന്റാണ്. പേരു സൂചിപ്പിക്കുന്നതുപോലെ വാക്കുകൾ വലിയ അക്ഷരങ്ങളിൽ എഴുതുകയാണിതന്റെ ജോലി. ഉദാ:

banner Hello

നിലവിൽ ബാനർ കമാന്റിന് മലയാളമറിയാത്തതിനാൽ മലയാളത്തിൽ ബാനറെഴുത്ത് നടക്കില്ല. ബാനർ കമാന്റ് ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ലെങ്കിൽ അത് ഇൻസ്റ്റാൾ ചെയ്യാൻ ഈ കമാന്റ് ഉപയോഗിക്കാം:
ഉബുണ്ടുവിൽ : sudo apt get install banner
ഫെഡോറയിൽ : sudo yum install banner

ബാനർ കമാന്റിനെക്കാളും രസമുള്ള കമാന്റാണ് sl. പലപ്പോഴും ls നു (ഫയലുകളുടെ പേര് ലിസ്റ്റ് ചെയ്യുന്ന കമാന്റ്, ഡോസിലെ dir പോലെ) പകരം sl എന്നു തെറ്റായി ടൈപ്പുചെയ്യപ്പെടാറുണ്ട്. അങ്ങനെ sl എന്നു ടൈപ്പു ചെയ്താൽ ഒരു തീവണ്ടി ടെർമിനലിൽ കൂടി ഓടിപ്പോകുന്നതു കാണാം.
sl ഇൻസ്റ്റാൾ ചെതിട്ടില്ലെങ്കിൽ ഇങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാം:
ഉബുണ്ടുവിൽ : sudo apt get install sl
ഫെഡോറയിൽ : sudo yum install sl

cowsay, cowspeak എന്നിങ്ങനെ വേറെ ചില കമാന്റുകളുമുണ്ട്, അതൊക്കെ പരീക്ഷിച്ചു നോക്കുക.

സംസാരിക്കുന്ന ലിനക്സ്

ഇന്നു നമ്മൾ പരിചയപ്പെടാൻ പോകുന്ന കമാന്റാണ് espeak. ഇത് ഒരു ടെക്സ്റ്റ് റ്റു സ്പീച്ച് സിന്തസൈസറാണ്. സ്പീക്കർ ഓൺ ചെയ്ത് അല്ലെങ്കിൽ ഹെഡ്ഫോൺ കണക്റ്റ് ചെയ്ത ശേഷം ടെർമിനലിൽ ഈ കമാന്റ്‌‌ റൺ ചെയ്യുക :

espeak "Hello world"

(espeak ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ലെങ്കിൽ ഉബുണ്ടുവിൽ sudo apt-get install espeak എന്ന കമാന്റുപയോഗിച്ചും ഫെഡോറയിൽ sudo yum install espeak എന്ന കമാന്റുപയോഗിച്ചും  ഇൻസ്റ്റാൾ ചെയ്യാം)

ഹലോ വേൾഡ് എന്ന് നിങ്ങൾക്ക് കേൾക്കുവാൻ കഴിയും. പറയുന്നതിന്റെ വേഗത കൂട്ടണമെങ്കിൽ -s (വേഗത, മിനിട്ടിൽ എത്ര വാക്കുകൾ) എന്ന കമാന്റ് ലൈൻ പരാമീറ്റർ ഉപയോഗിച്ച് വേഗത കൂട്ടുകയോ കുറയ്ക്കുകയോ ചെയ്യാം. ഉദാഹരണത്തിന് espeak -s 20   "Hello world" എന്നു കൊടുത്താൽ ഹലോഓഓ... വേഏഏൾഡ്.. എന്ന് കേൾക്കാം. ശതാബ്ദി പോകുന്ന വേഗത്തിൽ വേണമെങ്കിൽ espeak -s 300   "Hello world" എന്നു കൊടുത്താൽ മതി.

പിച്ച് മാറ്റണമെങ്കിൽ -p (പിച്ച്, 0 മുതൽ 100 വരെ) എന്ന പരാമീറ്റർ ഉപയോഗിക്കാം. espeak -p 99 "Hello world" എന്നു കൊടുത്താൽ പിച്ചിൽ വരുന്ന വ്യത്യാസം മനസ്സിലാക്കാം.

വേഗതയും പിച്ചും ഒരുമിച്ചു മാറ്റാൻ രണ്ട് ഓപ്ഷനുകളും ഒരുമിച്ചു കൊടുക്കാം. ഇവിടെ പരാമീറ്ററുകളുടെ ക്രമത്തിന് പ്രാധാന്യമില്ല espeak -s 50 -p 75 "Hello World" ഉം  espeak -p 75 -s 50 "Hello World"ഉം ഒന്നു തന്നെയാണ്. ശ്രദ്ധിക്കേണ്ട ഒരു കാര്യം ഒന്നിലധികം വാക്കുകൾ ഉണ്ടെങ്കിൽ അവയെ ക്വോട്ടുകൾക്കുള്ളിൽ ഉൾപ്പെടുത്തണമെന്നാണ്.

അടുത്ത ചോദ്യം  espeak നു മലയാളമറിയാമോ എന്നല്ലേ? espeak, ബാനർ പോലെ അല്ല, മലയാളവും സംസാരിക്കും, പക്ഷേ ഒരു പടിഞ്ഞാറൻ ചുവയുണ്ടെന്നാണ് എന്റെ അഭിപ്രായം. "ആശാനേ, സുഖമാണോ?" എന്നു ലിനക്സിനെ കൊണ്ട് ചോദിപ്പിക്കുവാൻ
espeak -v ml "ആശാനേ, സുഖമാണോ?"
എന്ന കമാന്റ് കൊടുത്താൽ മതി. ഇതിൽ -v ml  എന്ന പരാമീറ്റർ മലയാളം ഉപയോഗിക്കാനുള്ള സൂചനയാണ്. മലയാളം കൂടാതെ മറ്റു പല ഭാഷകളും espeak സപ്പോർട്ട് ചെയ്യുന്നുണ്ട്. അവയുടെ വിവരങ്ങൾ കാണാൻ   espeak --voices എന്ന കമാന്റ്‌‌ കൊടുത്താൽ മതിയാകും. ഈ കമാന്റിലെ പരാമീറ്ററിന്റെ വ്യത്യാസം ശ്രദ്ധിച്ചോ? രണ്ട് മൈനസും പിന്നെ വോയ്സ് എന്നും. ഇത് ലോങ് പരാമീറ്ററാണ്, ഓർക്കാനുള്ള സൗകര്യത്തിനാണ് ലോങ് പരാമീറ്ററുകൾ. ലോങ് പരാമീറ്ററുകളെ അടയാളപ്പെടുത്താനാണ് രണ്ട് മൈനസ് സൈനുകൾ ഉപയോഗിക്കുന്നത്. കമാന്റ്‌‌ ലൈൻ പരാമീറ്ററുകളെ കുറിച്ച് മറ്റൊരിക്കൽ എഴുതാം.

കമാന്റ് ലൈനിൽ വാക്കുകൾ ഓരോ തവണയായി കൊടുക്കുന്നതിനു പകരം ടൈപ്പു ചെയ്യുന്ന മുറയ്ക്ക് സംസാരിപ്പിക്കുവാനുമാകും. espeak -v ml എന്നു ടൈപ്പു ചെയ്ത് എന്റർ കീ അമർത്തുക. ഇനി ടൈപ്പു ചെയ്യുന്നതെല്ലാം എന്റർ കീ അമർത്തിയാലുടൻ കേൾക്കുവാൻ കഴിയും. espeak ഇൽ നിന്നും പുറത്തു വരുവാൻ ctrl + d അമർത്തുക.

ഒരു മലയാളം ടെക്സ്റ്റ് ഫയലിനെ വായിക്കണമെന്നുണ്ടെങ്കിൽ espeak -v ml < file_name എന്നു കൊടുത്താൽ മതി. ("<" എന്നത് input redirection ഓപ്പറേറ്ററാണ്, ഇതിനെക്കുറിച്ചും വിശദമായി മറ്റൊരിക്കൽ എഴുതാം.)

നിങ്ങളുടെ ലിനക്സിന് നിങ്ങളോടു പലതും പറയാനുണ്ടാകും, പിന്നെ കാണാം.