LINUX.ORG.RU

Надо заменить переменную окружения для всей системы из ПО.


0

2

Здравствуйте!

Есть кусок кода, который модифицирует переменную окружения (задает часовой пояс):

rs = setenv("TZ", str, 1);
tzset();
printf("setenv_res:%i", rs);
puts(getenv("TZ"));
Все отлично работает - переменная изменяется, rs=0. Но переменная окружения - конкретного процесса. Стоит выйти из программы и сделать в sh: «env» - переменная не изменена и новый часовой пояс не используется для расчета localtime.

Если не запуская программу - сделать в sh:

export TZ="MSK-3:00:00"

то все отлично и localtime - дает верное время.

И еще: после перезагрузки - всё слетает.

P.S. ОС: Angstrom Linux. Порт под ARM.

Заранее спасибо!

Ответ на: комментарий от Manhunt

timedatectl

Лёня не вынес это на уровень dbus? Как удобно!

Был неправ, посыпаю голову пеплом.

$ gdbus introspect --system --dest org.freedesktop.timedate1 --object-path /org/freedesktop/timedate1
node /org/freedesktop/timedate1 {
  interface org.freedesktop.timedate1 {
    methods:
      SetTime(in  x usec_utc,
              in  b relative,
              in  b user_interaction);
      SetTimezone(in  s timezone,
                  in  b user_interaction);
      SetLocalRTC(in  b local_rtc,
                  in  b fix_system,
                  in  b user_interaction);
      SetNTP(in  b use_ntp,
             in  b user_interaction);
    signals:
    properties:
      readonly s Timezone = 'Europe/Moscow';
      readonly b LocalRTC = false;
      readonly b CanNTP = false;
      readonly b NTP = false;
  };
  interface org.freedesktop.DBus.Properties {
    methods:
      Get(in  s interface,
          in  s property,
          out v value);
      GetAll(in  s interface,
             out a{sv} properties);
      Set(in  s interface,
          in  s property,
          in  v value);
    signals:
      PropertiesChanged(s interface,
                        a{sv} changed_properties,
                        as invalidated_properties);
    properties:
  };
  interface org.freedesktop.DBus.Introspectable {
    methods:
      Introspect(out s data);
    signals:
    properties:
  };
  interface org.freedesktop.DBus.Peer {
    methods:
      Ping();
      GetMachineId(out s machine_uuid);
    signals:
    properties:
  };
};
Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)
Ответ на: комментарий от Manhunt

Вынес и сделал CLI-обёртку, как и во всех остальных случаях.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.