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.

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

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

не не не, ты что

press: win + r
type:  control
press: enter
press: ctrl + f
type: envi
press: enter

pon4ik ★★★★★
()

ну-ну. клиника.

anonymous
()
man /etc/profile

и иже с ним

pon4ik ★★★★★
()
Ответ на: комментарий от powerguy

Ångström — дистрибутив операционной системы Linux, предназначенный для работы на КПК и встраиваемых устройствах.

timedatectl

не взлетит.

Deleted
()
Ответ на: комментарий от 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 ★★★★★
()
Ответ на: комментарий от Manhunt

1. Пишут, что использовать /etc/localtime - это устаревший подход. Сейчас новое веяние - это задавать часовой пояс через переменную окружения TZ. Проверил - работает. Теперь надо внести это в программу.

2. Посмотрел /etc/profile. Как я понял, он инициализирует переменную PS1. Т.е. теоретически - можно сделать строчку TZ=«MSK-3:00:00» и он добавит ее при загрузке ? Неплохо, но как-то не очень хочется лезть пользовательским ПО в этот файл. Мало ли что...

3. Да, хотелось бы сменить всем пользователям.

P.S. я новичок в линуксе, поэтому могу задавать глупые вопросы. Просьба отнестись с пониманием.

atridies
() автор топика
Ответ на: комментарий от atridies

В больших линуксах есть директория /etc/profile.d, в которую можно^Wнужно класть свои настройки для всех пользователей. Они применяются при логине в систему.

Если вышеобозначенной директории нет - можно править сам файл /etc/profile.

dhameoelin ★★★★★
()
Последнее исправление: dhameoelin (всего исправлений: 2)
Ответ на: комментарий от powerguy

Во-первых: надо. Ибо это встраиваемое приложение. Физически девайс может оказаться в любом месте: хоть на Камчатке, хоть в Калининграде. А пользователь - должен получать местное время. Насчет DBus - спасибо, посмотрю.

atridies
() автор топика
Ответ на: комментарий от atridies

я новичок в линуксе, поэтому могу задавать глупые вопросы.

А это не linux-specific. В венде позорной точно также нельзя изменить окружение родительского процесса из дочернего.

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