27 января 2010 г.

Погодный апплет Gnome и добавление в него нового города

На панель задач в GNOME можно добавить удобную фиговинку (подобные штуки называются апплетами) для просмотра текущей погоды. Точнее там даже два апплета: специальный для погоды и для часов, который также может показывать и погоду, оба входят в стандартный набор. Вот так это выглядит (на картинке погода настроена для двух разных городов - Новокузнецка и Красноярска; кстати, изначально выбрать второй возможности нет):
Gnome weather applet

Оказалось, что не все города есть в списке, откуда происходит их выбор в настройках, есть даже не все центры субъектов Российской Федерации. Вообще погода для этих апплетов показывается не для городов, а только для аэропортов (ещё, к примеру, многие джаббер-боты работают так же), но в списке нет некоторых крупных городов как Томск, Красноярск, Магнитогорск, хотя у них есть свои аэропорты. Ещё есть такой косяк, что вроде как нет Нижнего Новгорода, но зато есть Стригино - а это и есть аэропорт Нижнего Новгорода, но ведь вместо Новосибирска ведь нет пункта "Толмачёво".
Однако, добавление недостающих городов, ну а заодно и исправление некорректных названий (как в случае с Нижним Новгородом, либо, допустим, в случае если тольяттинцу захочется, чтобы в апплете отображалось название именно его города,а изначально там есть только Самара - аэропорт-то общий), возможно в данном случае через правку конфигурационных файлов вручную.

В апплете "Сводка погоды" (версия 2.28.0) выбор производится в параметрах на вкладке Местоположение из многоуровнего списка сначала по частям света, потом по странам (все российские города там в Европе, даже те, что географически в Азии). Результат примерно такой (подробности открываются при щелчке на апплете):
Gnome weather applet left click

Чтобы погоду показывал апплет часов рядом со временем, в его параметрах надо выставить галки "Показывать погоду" и "Показывать температуру", а на вкладке "Местности" добавить город - там просто окошко, в котором можно набрать "Россия" и появится список всех имеющихся российских городов (казалось бы, можно написать что угодно, и даже потом ниже ввести вручную координаты, но погоды для любой местности таким образом не добиться).

Gnome time applet left click
Штука с календарём и картой появляется при левом щелчке на апплете, и нужно ещё нажать на "Установить" рядом с городом, чтобы появился домик.

При наведении курсора на область апплета, отображающую прогноз, появляется такая плашечка с подробностями о погоде.
Gnome time applet weather

А теперь о том, как добавить отсутствующий в списке город. Прежде всего нужно открыть файл Locations.xml из папки /usr/share/libgweather/ с правами суперпользователя. Надо учесть, ещё, что файл очень большой, и открывать его следует текстовым редактором, который с этим справится, например:

sudo geany /usr/share/libgweather/Locations.xml
Но для этого придётся предварительно установить программу geany. Ещё где-то советовали mcedit, но вот стандартные gedit и kate не подойдут в данном случае.
Остаётся добавить в этот файл информацию о нужном городе по аналогии с содержащейся там уже информацией.

Файл имеет простую структуру - для каждого города есть строка, постоенная по определённым правилам. Например, для Томска будет так:

<city>
<name>Novosibirsk</name>
<coordinates>55.041111 82.934444</coordinates>
<location>
<name>Novosibirsk</name>
<code>UNNT</code>
<tz-hint>Asia/Novosibirsk</tz-hint>
<coordinates>55.083333 82.900000</coordinates>
</location>
</city>
В самом файле всё это идёт сплошным текстом без переноса строк, однако, думаю, добавлять можно как угодно.

Для каждого города прописано его "имя" и "место" (видимо, имеется в виду именно аэропорт, их может быть несколько, например, у Москвы 3 <location>, хотя по умолчанию выбирается, судя по координатам, Внуково), координаты и самого города и аэропорта, есть часовой пояс и код ICAO аэропорта.
ICAO - это четырёхбуквенные коды аэропортов, их можно брать на сайте apinfo.ru (конкретно по городу поиск тут), или можно просто погуглить. Они и являются самым важным для информации о погоде.
Координаты можно опять же погуглить или взять в википедии, но что-то незаметно, чтобы они на что-то влияли (скорее всего, только на положение "домика" на карте в настройке погода часов), так что большая точность ни к чему.
Часовой пояс нигде гуглить не нужно, его и так каждый знает. А список их обозначений приводится всё в том же файле - для удобства вот он:

UTC +2 Калининградское время - Europe/Kaliningrad
UTC +3 Московское время - Europe/Moscow или Europe/Volgograd
UTC +4 Самарское время - Europe/Samara
UTC +5 Екатеринбургское время - Asia/Yekaterinburg
UTC +6 Омское время - Asia/Omsk или Asia/Novosibirsk
UTC +7 Красноярское время - Asia/Krasnoyarsk
UTC +8 Иркутское время - Asia/Iskutsk
UTC +9 Якутское время - Asia/Yakutsk
UTC +10 Владивостокское время - Asia/Vladivostok или Asia/Sakhalin
UTC +11 Магаданское время - Asia/Magadan
UTC +12 Камчатское время - Asia/Kamchatka или Asia/Anadyr

Зачем нужны разные обозначения для одного и того же пояса, и где это может использоваться, не в курсе, но для Новосибирска в файле прописано именно Asia/Novosibirsk
Что ещё интересно, все названия в этом файле даны транслитом, а в графическом интерфейсе кириллицей, то есть кириллические названия программы берут из других файлов. Однако можно и даже нужно при добавлении своих городов в файл писать название кириллицей - работать всё будет в любом случае, а отображать названия апплеты будут именно в том виде, в котором их сюда ввести.

Вот пример, для нескольких городов, отсутствующих изначально (Магнитогорск, Томск, Нерюнгри, Красноярск, Тула, Набережные Челны):

<city><name>Магнитогорск</name><coordinates>53.230000 59.020000</coordinates><location><name>Magnitogorsk</name><code>USCM</code><tz-hint>Asia/Yekaterinburg</tz-hint><coordinates>53.390000 58.760000</coordinates></location></city>
<city><name>Томск</name><coordinates>56.300000 84.580000</coordinates><location><name>Bogashovo Airport</name><code>UNTT</code><tz-hint>Asia/Omsk</tz-hint><coordinates>56.380000 85.210000</coordinates></location></city>
<city><name>Нерюнгри</name><coordinates>56.393000 124.433000</coordinates><location><name>Chulman Airport</name><code>UELL</code><tz-hint>Asia/Yakutsk</tz-hint><coordinates>56.650000 124.600000</coordinates></location></city>
<city><name>Красноярск</name><coordinates>56.000000 92.560000</coordinates><location><name>Emelyanovo Airport</name><code>UNKL</code><tz-hint>Asia/Krasnoyarsk</tz-hint><coordinates>56.170000 92.490000</coordinates></location></city>
<city><name>Тула</name><coordinates>54.120000 37.370000</coordinates><location><name>Tula</name><code>UUBT</code><tz-hint>Europe/Moscow</tz-hint><coordinates>54.240000 37.600000</coordinates></location></city>
<city><name>Набережные Челны</name><coordinates>55.420000 52.200000</coordinates><location><name>Naberezhnye Chelny</name><code>UWKE</code><tz-hint>Europe/Moscow</tz-hint><coordinates>55.560000 52.090000</coordinates></location></city>
Вставлять строчки можно не соблюдая алфавитный порядок как в файле - всё равно в списке города сами встанут в нужное место.

Этот способ я нашла на форуме убунты. Там был ещё один, который у меня почему-то не сработал, но на всякий случай пусть тут полежит:
В свойствах апплета часов добавляем любое место на Земле, от фонаря. Затем, открываем утилитку gconf-editor, открываем в ней ключ /apps/panel/applets/clock_screen0/prefs. Там находим параметр cities - это список, но сейчас там только один пункт. Открываем параметр и видим окно со списком из одной строки, нажимаем на кнопку "Редактировать". Перед нами значение, выглядящее примерно так:

<location name="Novosibirsk" timezone="Asia/Yekaterinburg" latitude="55.083332" longitude="82.900002" code="UNNT" current="true"/>
Здесь меняем название города, временной зоны, координаты и код аэропорта. Сохраняем введённое значение.

9 комментариев:

  1. Спасибо, настроил аплет на Набережные Челны

    ОтветитьУдалить
  2. Спасибо за томск!

    ОтветитьУдалить
  3. новый город ни как не добавляется...

    ОтветитьУдалить
  4. При помощи добавления редактора geany при внесении данных Набережных Челнов выдает сообщение "отказано в доступе" :(
    Подскажите нубу как и что там сделать.

    ОтветитьУдалить
  5. С правами суперпользователя надо открывать же. Например, Alt+F2 и в строке "gksu geany" - запросит пароль. Нужно ввести пароль текущего пользователя и программа будет открыта с правами рута.

    ОтветитьУдалить
  6. В Ижевске не смотря на наличие;
    аэропорта, Кода аэропорта, координат.
    Погоду не показывает!

    ОтветитьУдалить
  7. Спасибо за статью.
    У меня кстати наоборот, первый способ не заработал, а вот по второму все получилось

    ОтветитьУдалить