The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Решение проблемы со шрифтами в Steam после выставления времени после 2038 года
Некоторые игры позволяют получать достижения если не запускать игру несколько
лет, например,  The Stanley Parable содержит достижение, активируемое после 5
лет неактивности, а Ultra Deluxe - после 10. Для получения указанных бонусов
обычно переводят часы на необходимое время вперёд, запускают игру для фиксации
достижения и возвращают время назад.

Проблема в том, что если время изменено на момент после 2038 года, подобная
манипуляция приводит к смене в интерфейсе Steam шрифта, и выставленный шрифт
может оказаться экзотическим, что мешает восприятию информации.

Указанный эффект связан с отсутствием в некоторых приложениях, и в частности в
fontconfig, поддержки корректной работы после 2038 года из-за переполнения
32-разрядного типа данных  time_t. Наличие проблемы выражается в выводе
сообщения об ошибке "Value too large for defined data type" при запуске
fontconfig в случае наличия файлов с датой доступа после 2038 года.

   $ stat /etc/fonts/conf.d/*|grep 2040
   Access: 2040-11-22 00:00:04.110328309 +0100
   Access: 2040-11-22 00:00:04.110328309 +0100
   Access: 2040-11-22 00:00:04.110328309 +0100
   ...

Для решения проблемы следует поменять ушедшее в будущее время доступа на текущее:

   sudo mount -o remount,strictatime /
   sudo mount -o remount,strictatime /home
   sudo find / -newerat 2038-01-19 -exec touch -a {} +
   sudo mount -o remount,relatime /
   sudo mount -o remount,relatime /home

Перемонтирование с опцией "strictatime" необходимо так как по умолчанию при
монтировании используется опция "relatime" при которой время доступа меняется
только если обращение произведено позднее уже выставленного для файла времени доступа.
 
20.11.2022 , Источник: http://blog.pkh.me/p/35-investigati...
Ключи: font, time, 2038, steam, bug / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Установка и синхронизация времени

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Аноним (1), 18:50, 20/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +24 +/
    > Указанный эффект связан с отсутствием в некоторых приложениях, и в частности в fontconfig, поддержки корректной работы после 2038 года из-за переполнения 32-разрядного типа данных time_t.

    Это баг fontconfig, и он должен решаться исправлением в fontconfig. Причём уже сейчас, до 2038 всего-ничего.

     
     
  • 2.28, anonymous (??), 21:39, 10/06/2023 [^] [^^] [^^^] [ответить]  
  • +/
    А будет ли он?
     
     
  • 3.29, Я (??), 21:35, 08/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    2038й будет, будет ли фонтконфиг.. спойлерить не стану
     

  • 1.3, Аноним (-), 22:10, 23/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Готовите сани летом? За 18 лет вперед? Похвально!
     
     
  • 2.4, Аноним (4), 19:48, 26/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тут всё описано - https://en.wikipedia.org/wiki/Year_2038_problem
     
     
  • 3.6, Аноним (-), 20:42, 27/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А вы точно уверены что в 2038 будет актуальна именно вон та проблема? Хорошо знать все наперед, на 20 лет.
     
     
  • 4.12, Аноним (12), 00:18, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +15 +/
    Вы не в ЖКХ Питера работаете?
     
  • 4.14, Kuku (?), 20:11, 03/01/2023 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Счастье дураков заключается именно в том, что они заранее не парятся 😈
     

  • 1.5, Alex (??), 08:00, 27/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Сейчас 2022 год, если нужно ачивки 10 лет - выстави 2033г и не парься. Почему именно 2038 выставлять ставь уже 3030г ?
     
     
  • 2.16, НР (?), 12:26, 19/01/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Потому что мой компьютер - делаю что хочу.
     
     
  • 3.25, Аноним (25), 19:19, 06/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Сильный и независимый!
     
  • 2.17, freehck (ok), 11:50, 21/01/2023 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Алекс, ну как ты не понимаешь. Если человек ничем по жизни не занят, то его единственная возможность кайфануть от героического решения проблемы -- это создать себе проблему самостоятельно! =)
     

  • 1.7, Иван_Лох (?), 11:37, 05/12/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А faketime недостаточно?
     
  • 1.8, Neon (??), 21:18, 08/12/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Какой маразм))). Ну какая связь между временем и шрифтами ?! Разработчики, вы, вообще, кукушкой поехали ?!)))
     
     
  • 2.9, kusb (?), 16:40, 11/12/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    В современных ИТ всё связано со всем...
     
  • 2.10, Аноним (10), 10:34, 21/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Время используется в программе, отвечающей за шрифты. Больше интересует, как смена числа 2022 на 2038 даже в двоичной форме может повлиять. 11111100110 и 11111110110, всего то 0 нолик на 1 поменялся.
     
     
  • 3.11, Admino (ok), 18:33, 22/12/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Время используется в программе, отвечающей за шрифты.

    ЗАЧЕМ?

     
     
  • 4.13, pavlinux (ok), 20:11, 29/12/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Например https://github.com/freedesktop/fontconfig/blob/master/src/fcinit.c#L230




    FcBool
    FcInitBringUptoDate (void)
    {
        FcConfig *config = FcConfigReference (NULL);
        FcBool ret = FcTrue;
        time_t now;

        if (!config)
    return FcFalse;
        /*
         * rescanInterval == 0 disables automatic up to date
         */
        if (config->rescanInterval == 0)
    goto bail;
        /*
         * Check no more often than rescanInterval seconds
         */
        now = time (0);
        if (config->rescanTime + config->rescanInterval - now > 0)
    goto bail;
        /*
         * If up to date, don't reload configuration
         */
        if (FcConfigUptoDate (0))
    goto bail;
        ret = FcInitReinitialize ();
    bail:
        FcConfigDestroy (config);

        return ret;
    }



    https://github.com/freedesktop/fontconfig/blob/master/fc-cache/fc-cache.c#L445



      /*
         * Now we need to sleep a second  (or two, to be extra sure), to make
         * sure that timestamps for changes after this run of fc-cache are later
         * then any timestamps we wrote.  We don't use gettimeofday() because
         * sleep(3) can't be interrupted by a signal here -- this isn't in the
         * library, and there aren't any signals flying around here.
         */
        /* the resolution of mtime on FAT is 2 seconds */


    Надеюсь сам догонишь, для чего кэшу время?

     
  • 3.15, aa (?), 09:57, 11/01/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    числа 2022 и 2038 здесь совсем не при чем.
    дата представляется количеством секунд прошедших с 1 января 1970 года
    в 2038 году это количество перестанет влезать в 32 число
    поэтому адекватные программисты уже давно переходят на 64 бита для представления времени
    тут вот откопали библиотеку которая еще этого не сделала.
     
     
  • 4.21, Анонимчик (?), 13:49, 24/02/2023 [^] [^^] [^^^] [ответить]  
  • +/
    в 2038 перестанет влезать в signed 32 bit integer, unsigned ещё продержится лет 50, или сколько там пройдёт с 1970.
     
     
  • 5.26, Sem (??), 17:44, 11/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    unsigned не выйдет, time(2) может вернуть -1 для сигнализации ошибки. Очень любили в C API возвращать -1 как ошибку. И за этого теряем целый бит.
     
     
  • 6.34, Я (??), 21:55, 08/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > unsigned не выйдет, time(2) может вернуть -1 для сигнализации ошибки. Очень любили
    > в C API возвращать -1 как ошибку. И за этого теряем
    > целый бит.

    не теряем, а приобретаем. и вообще это же здорово что ошибка настигнет ещё живыми некоторых из своих создателей. а то обычно как: предки нагадят и в гроб, а потомки разгребай.

     
  • 3.24, tacitusdef (??), 05:30, 03/04/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Потому, что время выставляется в unix timestamp, который считается в секундах с 1970 года.
     
  • 3.30, Я (??), 21:45, 08/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Время используется в программе, отвечающей за шрифты. Больше интересует, как смена числа
    > 2022 на 2038 даже в двоичной форме может повлиять. 11111100110 и
    > 11111110110, всего то 0 нолик на 1 поменялся.

    ну смотри время в юниксе это количество секунд прошедших с 00:00:00 1 января 1970 года
    тоесть сейчас это примерно 1691520145 (1100100110100101000110010010001) 31 знак
    а в 2038 это будет уже 2164894788 (10000001000010011010110001000100) 32 знака а это только в unsigned_int лезет

     

  • 1.18, freehck (ok), 11:55, 21/01/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Проблема в том, что если время изменено на момент после 2038 года,
    > подобная манипуляция приводит к смене в интерфейсе Steam шрифта...

    Об грабли автор что ли приложился, не пойму.

    В 2038м году, через 16 лет, скорее всего и x32-систем не останется, а подобные игры вы будете запускать в хардварных эмуляторах по типу того же досбокса, и будете считаться ретро-геймерами. В 2038м году -- проблемы не будет. А сейчас вполне сойдёт воркэраунд вида "выставить 2037й год". Блин, на что время тратят, ну чесслово, людям совершенно нечем заняться. )))

     
     
  • 2.19, Аноним (-), 16:11, 19/02/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Типичный регистрант: имеет мнение, ставит скобочки, а про x32 abi даже не слышал.
     
     
  • 3.20, freehck (ok), 16:14, 19/02/2023 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Типичный аноним: всем недоволен, пустился в ad hominem, по делу ничего не сообщил.
     
     
  • 4.23, Глашатый (?), 16:49, 17/03/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Что никак не обеляет автора ветки.
     
  • 2.22, Kuromi (ok), 03:07, 11/03/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    FIXED

    "Об грабли гуманоид что ли приложился, не пойму.

    В 2038м году, через 16 лет, скорее всего и живых людей не останется, а подобные проблемы вы будете запускать в VR эмуляторах по типу того же Матрицы, и будете считаться AI-overlordами, которым больше нечем заняться. "

     
     
  • 3.32, Я (??), 21:51, 08/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > FIXED
    > "Об грабли гуманоид что ли приложился, не пойму.
    > В 2038м году, через 16 лет, скорее всего и живых людей не
    > останется, а подобные проблемы вы будете запускать в VR эмуляторах по
    > типу того же Матрицы, и будете считаться AI-overlordами, которым больше нечем
    > заняться. "

    ну не это скорее 2338 год.. какраз уже третья синтетическая война и всё такое..

     
  • 2.31, Я (??), 21:49, 08/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >> Проблема в том, что если время изменено на момент после 2038 года,
    >> подобная манипуляция приводит к смене в интерфейсе Steam шрифта...
    > Об грабли автор что ли приложился, не пойму.
    > В 2038м году, через 16 лет, скорее всего и x32-систем не останется,
    > а подобные игры вы будете запускать в хардварных эмуляторах по типу
    > того же досбокса, и будете считаться ретро-геймерами. В 2038м году --
    > проблемы не будет. А сейчас вполне сойдёт воркэраунд вида "выставить 2037й
    > год". Блин, на что время тратят, ну чесслово, людям совершенно нечем
    > заняться. )))

    ну не обязательно всплывут где-то непатченные системы про которые все давно забыли а они оказывается работали и просто делали своё дело.. пока не перестали. и ещё не сразу поймут что проблема в них потому что поверх будет куча всего другого навёрнута..

     

  • 1.27, AntonAlekseevich (ok), 09:42, 23/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вопрос следующий, а подвержены ли этому эффекту системы у которых в опциях монтирования присутствует noatime?

    Предполагаю отсутствие данного спецэффекта, но не отрицаю появления других спецэффектов.

     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру