Вот ваш лучший вариант:
Используйте sudo hwinfo --framebuffer
, как описано, выберите видеорежим, который вы хотите видеть во время загрузки в консоли, затем добавьте option vga = nnn
в параметры загрузки ядра.
Единственная уловка заключается в том, что nnn
- это режим видео, который вы выбрали из списка, созданного hwinfo
- ПРЕОБРАЗОВАННЫЙ В ДЕСЯТИЧНОЕ !!!
Если вы попробуете vga = 0xwhatever
, это не сработает.
Например, я выбрал видеорежим 0x307 (1280x1024 (+1280), 8 бит), я преобразовал 0x307 в десятичное, что составляет 775, а затем я использовал vga = 775
в параметрах загрузки isolinux / extlinux .
Вы можете использовать printf для преобразования шестнадцатеричного числа в десятичное:
$ printf "% d \ n" 0x307
775
И У меня с самого начала был красивый мелкий текст на всех приставках.
Успех!
Текущий часовой пояс по умолчанию, используемый в FreeBSD, а также в OpenBSD и NetBSD, будет очевиден из проверки символической ссылки /etc/localtime
. Он будет указывать на файл определения часового пояса в /usr/share/zoneinfo
.
Например:
$ ls -l /etc/localtime
lrwxr-xr-x 1 root wheel 36 Aug 11 13:51 /etc/localtime -> /usr/share/zoneinfo/Europe/Stockholm
Ответ TLDR::
$ POSIXTZ=$(tail -n1 /etc/localtime)
$ echo $POSIXTZ
CET-1CEST,M3.5.0,M10.5.0/3
$ TZNAME=$(find /usr/share/zoneinfo | while read fname; do cmp -s /etc/localtime "$fname" && echo "$fname" | cut -c 21- ; done)
$ echo $TZNAME
Europe/Copenhagen
Текущий часовой пояс хранится в файле /etc/localtime
. Как отмечает @Kusalananda, это может быть символической ссылкой. Но, как намекает @JdeBP, во FreeBSD этот файл обычно копируется из /usr/share/zoneinfo
во время установки.
Эти файлы взяты из текстовых описаний в contrib/tzdata
Затем эта информация компилируется в двоичный формат с использованием zic , формат указывается в tzfile
Я не знаю встроенной утилиты, которая непосредственно разбирает этот файл. Но писать на C должно быть легко, имея под рукой документацию. Если мы хотим придерживаться того, что выходит из коробки, мы можем посмотреть на это, используя hexdump
.
hexdump -v -C /etc/localtime
Или если мы просто хотим посмотреть на магический маркер:
$ hexdump -v -s 0 -n 5 -e '1/5 "%s\n"' /etc/localtime
TZif2
Или поля:
tzh_ttisgmtcnt The number of UTC/local indicators stored in the file.
tzh_ttisstdcnt The number of standard/wall indicators stored in the file.
tzh_leapcnt The number of leap seconds for which data is stored in the file.
tzh_timecnt The number of ``transition times'' for which data is stored in the file.
tzh_typecnt The number of ``local time types'' for which data is stored in the file (must not be zero).
tzh_charcnt The number of characters of ``time zone abbreviation strings'' stored in the file.
Использование:
hexdump -v -s 19 -n 4 -e '"tzh_ttisgmtcnt: " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 23 -n 4 -e '"tzh_ttisstdcnt: " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 27 -n 4 -e '"tzh_leapcnt: " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 31 -n 4 -e '"tzh_timecnt: " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 35 -n 4 -e '"tzh_typecnt: " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 39 -n 4 -e '"tzh_charcnt: " 1/4 "%9u\n"' /etc/localtime
Результаты в моем случае:
tzh_ttisgmtcnt: 0
tzh_ttisstdcnt: 6
tzh_leapcnt: 6
tzh_timecnt: 0
tzh_typecnt: 133
tzh_charcnt: 6
Затем мы выполняем следующую математику, чтобы выяснить, где начинается первый ttinfo
:
43 + (tzh_timecnt * 4) + (tzh_timecnt * 1)
43 + (0 * 4) + (0 * 1) = 43
Колеса медленно падают:
$ hexdump -v -s 43 -n 6 -e '"ttinfo:\n tt_gmtoff: " 1/4 "%9u\n tt_isdst: " 1/1 "%1d\n tt_abbrind: " 1/1 "%1u\n"' /etc/localtime
ttinfo:
tt_gmtoff: 2350816009
tt_isdst: 96
tt_abbrind: 155
С этими цифрами я, наверное, немного ошибся. И это действительно мазохистский способ справиться с этим. Так что я остановился, едва найдя золото, используяtt_abbrind
Но если мы посмотрим в конец спецификации tzfile , мы найдем этот маленький самородок:
After the second header and data comes a newline-enclosed, POSIX-TZ-environment- variable-style string for use in handling instants after the last transi- tion time stored in the file (with nothing between the newlines if there is no POSIX representation for such instants).
Так что это так же просто, как:
$ tail -n1 /etc/localtime
CET-1CEST,M3.5.0,M10.5.0/
Если вы присмотритесь, то заметите, что /etc/localtime
не содержит настроек Continent/Region
! Но поскольку файл копируется из /usr/share/zoneinfo
, вы можете сравнить их и найти вероятный файл. Я не копался достаточно глубоко, чтобы подтвердить, что /usr/share/zoneinfo
может содержать дубликаты. Но для меня -это прекрасно работает:
$ find /usr/share/zoneinfo | while read fname; do cmp -s /etc/localtime "$fname" && echo "$fname" | cut -c 21- ; done
Europe/Copenhagen
Мы перебираем все файлы в /usr/share/zoneinfo
и сравниваем каждый из них с /etc/localtime
. cmp
с использованием параметра -s
ничего не отобразит, а выйдет только с использованием значения. Если значение равно нулю, мы напечатаем имя.При печати имени мы используем cut
, чтобы удалить первые 21 символ, чтобы получитьContinent/Region
Простое межплатформенное решение — использовать date
!
$ date +"%Z"
CET
$ date +"%z"
+0100
В вашем случае вы, вероятно, снова получите PST -, но я думаю, что этот ответ также важен для тех, кто может с этим согласиться. Это следует учитывать, если в среде установлен TZ. И в практическом использовании -смещение часто более удобно, чем Continent/Region
.
Если часовой пояс был установлен с помощью tzsetup
, то имя текущего часового пояса сохраняется в /var/db/zoneinfo
:
$ sudo tzsetup Europe/Berlin
$ cat /var/db/zoneinfo
Europe/Berlin
Это позволяет переустановить файл часового пояса/etc/localtime
:
$ sudo rm /etc/localtime
$ sudo tzsetup -r
$ ls -l /etc/localtime
-r--r--r-- 1 root wheel 2309 Feb 15 10:59 /etc/localtime
Если файл часового пояса был скопирован вручную, а не с помощью tzsetup
, вам необходимо найти имя соответствующего исходного файла, как объяснил Клаус Андерсен:
$ cd /usr/share/zoneinfo && find. -type f -exec cmp -s /etc/localtime '{}' \; -print | sed 's,^\./,,'
Europe/Berlin
Я тестировал это с FreeBSD версий 11.3 и 12.1.