Mail for Exchange винаги на линия при USB мрежа с Nokia N900
Владимир | 03/21/2011Една от хубавите страни на Nokia N900, е че е отворена платформа и можете да правите каквото ви хрумне с него (стига да не се страхувате че може да направите беля).
С тази играчка имате възможност да използвате поща. Поддържаните възможности са доста сериозни. Поддържат се някои доста известни доставчици на услугата (GMail, 3Mail, AOL др.), също така imap, pop3 (включително вариантите защитени със SSL) и Mail for Exchange (MfE). Лично аз съм голям противник на Exchange, но понякога човек просто няма избор (т.е. фирмата задължава). За удобство съм си го закачил на играчката (поради спецификата на работата ми).
За голямо мое неудоволствие се оказа че нямам кой знае колко настройки за честота на обновяване на иформацията. Е не че няма, но не ми бяха удобни.
Като възможности имаме избор между:
- Винаги на линия
- Всеки 15/30 мин
- Всеки 1/4/6/12 часа
- Ръчно
Да удобно е но, но не взима под внимание на каква мрежа сме закачени. Ако сме закачени на Wi-Fi подходяща е проверка на 30 мин (за да пестим батерия), ако сме на GPRS е подходяща проверка на 1 час (за да пестим трафик), но ако пък сме закачени посредством USB мрежа не ни притеснява нищо от това така че защо да не сме винаги на линия.
За наше щастие както казах и по горе това е отворена платформа и няма защо да се бъгясваме ами може да си го допишем (ако знаем как). Оказва се че модификацията която искаме хич не е тежка (даже доста лека бих казал).
Инфраструктурна информация
Устройството използва gconf за съхраняване на настройките си а gconf е доста гъвкав и всички необходими инструменти за неговата манипулации са на лице.
За да променим настройка в gconf ни е необходимо да знаем една доста малка част от командите/възможностите му.
/home/user # gconftool-2 --help-client Usage: gconftool-2 [OPTION...] - Tool to manipulate a GConf configuration Client options -s, --set Set a key to a value and sync. Use with --type. -g, --get Print the value of a key to standard output. -u, --unset Unset the keys on the command line /home/user # gconftool-2 --help-key-type Usage: gconftool-2 [OPTION...] - Tool to manipulate a GConf configuration Key type options -t, --type=int|bool|float|string|list|pair Specify the type of the value being set, or the type of the value a schema describes. Unique abbreviations OK. -T, --get-type Print the data type of a key to standard output.
Забележка: Изхода от командите е поорязан малко
План за действие
За да изпълним нашата задача ще създадем малък скрипт който да се изпълнява при включване в режим PC Suite, който да променя режима на синхронизация на винаги на линия. Скриптът ни ще запазва старите стойности за да може при изключване да ги възстановим.
Съответно ще напишем и скрипт който при изключване ще възстановява старите стойности.
Ще се възползване от предишаната статия за модулно изпълнение на скриптове при включване/изключване на PC Suite режима.
Скрипт за промяна на режима на синхронизация при включване на PC Suite
Създаваме си нов скрипт в директорията /etc/pcsuite/enable чиято цел е да промени настройките на нашите ActiveSync пощенски кутии (Exchange/Gmail) на винаги на линия.
01-set-activesync-allways-online.sh
# Set peak schedule to Always online on USB networking (PC Suite enable) LOCAL_AS_ACCOUNTS=`gconftool-2 --all-dirs /apps/activesync` for ACC in $LOCAL_AS_ACCOUNTS ; do # get original sync time (PEAK) mkdir -p /tmp/$ACC touch /tmp/$ACC/peak_schedule gconftool-2 -g $ACC/schedule/peak_schedule > /tmp/$ACC/peak_schedule gconftool-2 -g $ACC/schedule/current_schedule > /tmp/$ACC/current_schedule # Now set schedule to online gconftool-2 -s --type=int $ACC/schedule/peak_schedule -- 0 gconftool-2 -s --type=int $ACC/schedule/current_schedule -- 0 # Inc the change counter COUNTER=`gconftool-2 -g $ACC/params_change_id` #echo "COUNTER=$COUNTER" >> /tmp/counter #echo $(($COUNTER+1)) >> /tmp/counter gconftool-2 -s --type=int $ACC/params_change_id -- $(($COUNTER+1)) done
На 3ти ред получваме списък със всичките наши ActiveSync кутии/акаунти. След това за всяка една от тях създаваме уникално място в което да съхраним оригиналната настройка и я запазваме (gconftool-2 -g …). И накрая настройваме променливата peak_schedule на 0 което се превеждакато винаги на линия. Допълнително след малко опити и грешки се установи че трябва също така да настроим и променливата current_schedule, както и да увеличим брояча на промените в конфигурацията. Без тези две настройки поведението на клиента не е особенно надеждно.
Скрипт за промяна на режима на синхронизация при изключване на PC Suite
Спирането на PC Suite режима реално е изваждането на USB кабела.
Създаваме си нов скрипт в директорията /etc/pcsuite/disable чиято цел е да промени настройките на нашите ActiveSync пощенски кутии (Exchange/Gmail) на оригиналните които сме запомнили при включването в PC Suite режим.
98-restore-activesync-schedule.sh
# Set peak schedule to Always online on USB networking (PC Suite enable) LOCAL_AS_ACCOUNTS=`gconftool-2 --all-dirs /apps/activesync` for ACC in $LOCAL_AS_ACCOUNTS ; do # get original sync time (PEAK) LOCAL_ORIG_TIME=`cat /tmp/$ACC/peak_schedule` if [ "x$LOCAL_ORIG_TIME" == "x" ] ; then LOCAL_ORIG_TIME=60 fi LOCAL_ORIG_CURR_SCHED=`cat /tmp/$ACC/current_schedule` if [ "x$LOCAL_ORIG_CURR_SCHED" == "x" ] ; then LOCAL_ORIG_CURR_SCHED=60 fi # Now set original schedule gconftool-2 -s --type=int $ACC/schedule/peak_schedule -- $LOCAL_ORIG_TIME gconftool-2 -s --type=int $ACC/schedule/current_schedule -- $LOCAL_ORIG_CURR_SCHED # Inc the change counter COUNTER=`gconftool-2 -g $ACC/params_change_id` #echo "COUNTER=$COUNTER" >> /tmp/counter #echo $(($COUNTER+1)) >> /tmp/counter gconftool-2 -s --type=int $ACC/params_change_id -- $(($COUNTER+1)) # And cleanup the crap rm -rf /tmp/$ACC done
Тук по същият начин получаваме списък с акаунти и за всеки един от тях възстановяваме старите стойности. Ако по някаква случайност нямаме стара стойност избираме среден вариант със стойност от 1 час. И най-накрая разчистваме записаната настройка. Разбира се не трябва да забравяме да променим и брояча за промени на стойностите.
Заключение
Е с малко работа/играчка успяхме да обучим пощенският ни клиент да преминава автоматично в режим Винаги на Линия когато използваме USB мрежа (благодарение на PC Suite режима). По този начин ще сте винаги информирани какво се случва с вашата поща (а дали това е желателно си е чисто ваш проблем :P)
История:
- Първа версия: 21.03.2011
- Допълнителни променливи: 26.04.2011











































