РЕШЕНО - из консоли вернуть разрешение 80х25

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

v4567
Сообщения: 138

РЕШЕНО - из консоли вернуть разрешение 80х25

Сообщение v4567 » 02.04.2019 16:35

Без графики в консоли загружается фреймбуфер.

Код: Выделить всё

uname -a
Linux 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Linux
Может ошибаюсь, но выгрузить фреймбуфер и вернуть буквенно-цифровой режим 80х25 нельзя, если можно то как? Если нельзя, то как из консоли, не при загрузке через grub!, а из самой консоли поменять разрешение этого фреймбуфера, или поменять количество строк и столбцов?
Установлен пакет kbd, при помощи утилиты resizecons поменять количество столбцов и строк не получается. Например:

Код: Выделить всё

resizecons 80x25
resizecons: resizecons: не удалось найти файл видеорежима 80х25
Ранее в гугле находил информацию, что resizecons написана с ошибкой и менять при помощи её количество строк и столбцов бесполезно, надо пользоваться - сейчас не помню уже чем, но тогда с этой другой утилитой то же были проблемы и изменить количество строк и столбцов так и не удалось. Сейчас эту информацию не могу найти в гугле. Если кто знает подскажите пожалуйста.
Последний раз редактировалось v4567 20.04.2019 19:41, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4808
ОС: Gentoo

Re: из консоли вернуть разрешение 80х25

Сообщение /dev/random » 02.04.2019 18:46

v4567 писал:
02.04.2019 16:35
Может ошибаюсь, но выгрузить фреймбуфер и вернуть буквенно-цифровой режим 80х25 нельзя, если можно то как?
С большинством драйверов - нельзя.
v4567 писал:
02.04.2019 16:35
Если нельзя, то как из консоли, не при загрузке через grub!, а из самой консоли поменять разрешение этого фреймбуфера,
Очень сильно зависит от драйвера и не со всеми возможно. Можете посмотреть в сторону файлов /sys/classes/graphics/fb0/*.
v4567 писал:
02.04.2019 16:35
или поменять количество строк и столбцов?
А вот это очень легко, если посмотреть на проблему с другой стороны. Фреймбуферная консоль - это, по сути, графический эмулятор терминала (полноэкранный и внутриядерный, но всё же). А как в графическом терминале изменить количество строк/столбцов, не масштабируя окно? Правильно, сменить шрифт. См. команду setfont. Только учтите, что выбор шрифтов довольно ограничен, а максимальная высота - 32 пикселя.
Спасибо сказали:

v4567
Сообщения: 138

Re: из консоли вернуть разрешение 80х25

Сообщение v4567 » 03.04.2019 21:57

По поводу шрифтов немного не понял.
setfont-том я загружаю шрифты с расширением psfu, но это ведь шрифты для знакогенератора и они никак на размер не влияют. Будет 128х48 и шрифт этот маленьким отобразится. В данном случае будет наоборот не шрифт на размер будет влиять, а размер - количество столбиков и строк будет влиять на размер шрифта.
Другие шрифты при помощи setfont-а загрузить не удалось.

Попробовал поменять размеры при помощи fbset. Посмотрел у меня 1024х768, удалось выставить и реальные и виртуальные размеры 600х400, но сам размер знакоместа не изменился, в результате стало использоваться приблизительно пол экрана и размерами знакоместа такими какими они были ранее при 1024х768. Мне нужно именно увеличить размер знакоместа. Может это и можно сделать как то при помощи шрифтов, но как? У меня не получилось загрузить какие нибудь графические шрифты в фреймбуфее.

Казалось бы linux - в отличии от виндовс, всё для людей, всё можно настроить изменить. Но уже далеко не в первый раз натыкаюсь на невозможность сделать какие то простые вещи!
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4808
ОС: Gentoo

Re: из консоли вернуть разрешение 80х25

Сообщение /dev/random » 03.04.2019 22:08

v4567 писал:
03.04.2019 21:57
setfont-том я загружаю шрифты с расширением psfu, но это ведь шрифты для знакогенератора и они никак на размер не влияют. Будет 128х48 и шрифт этот маленьким отобразится. В данном случае будет наоборот не шрифт на размер будет влиять, а размер - количество столбиков и строк будет влиять на размер шрифта.
Это растровые шрифты. У каждого шрифта фиксированный размер. Другой размер можно выбрать только путём выбора другого шрифта. Попробуйте выбрать какой-нибудь с числом 32 в названии. Например, setfont latarcyrheb-sun32
Спасибо сказали:

v4567
Сообщения: 138

Re: из консоли вернуть разрешение 80х25

Сообщение v4567 » 03.04.2019 22:22

/dev/random огромное спасибо!
Скачал этот шрифт (у меня его не было) и всё получилось.
Правда я не понял как это устроено, я думал эти шрифты никак на размер не повлияют, сейчас раскрою его и посмотрю что внутри.
Было 128 столбцов и 48 строк, после загрузки этого шрифта стало 64 столбика и 24 строки.
Добавлено (22:25):
И ещё хочу спросить.
Как я понимаю консольные шрифты должны содержать 256 символов и никак не больше, ведь они должны записаться в аппаратный знакогенератор в котором только 256 символов.
А этот шрифт вроде как графический, получается в нём больше 256 символов?
Спасибо сказали:

v4567
Сообщения: 138

Re: из консоли вернуть разрешение 80х25

Сообщение v4567 » 04.04.2019 00:10

Немного прояснилось.
Я очень давно на ассемблере писал программу которая записывала шрифт в знакогенератор и потом выводила символы.
Разрешение там никак не зависело от шрифта, разрешение выставлялось некоторым кодом на порт ввода, могло быть 40х25 или 80х25 и т. д. и под эти разрешения надо было делать шрифты, если при разрешении 40х25 загрузить шрифт 8х16 то вторая половина буквы была бы всё время пустая, или наоборот при 80х25 загрузить (кстати не знаю может шрифт и не загрузился бы) шрифт 16х16 то всё время будет пол буквы.
В нашем случае - при linux-е когда мы загружаем шрифт то операционная система смотрит что за шрифт и в начале выставляет нужное разрешение, а потом грузит шрифт в знакогенератор.
Сейчас я загрузился в буквеноцифровом режиме без фреймбуфера и поэксперементировал с загрузкой разных шрифтов:
8х8 даёт режим 80х50
8х16 80х25
8х14 80х28 удивительно что он загрузился
latarcyrheb-sun32 оказался шрифтом 16х32 с количеством смволов 512 и в чистой буквенноцифровой консоли он не загрузился выдав ошибку - putfont: KDFONTOP недопустимый аргумент, а вот в фрейм буфере он отлично загрузился уменьшив количество столбцов и строк, скорее всего в фреймбуфере свой виртуальный (не аппаратный) знакогенератор, в который можно грузить и такие шрифты.
Ненашёл пока шрифт 16х16 он должен дать разрешение 40х25, попробую сделать сам и загрузить, посмотрю поменяется ли разрешение на 40х25.
Спасибо сказали:

v4567
Сообщения: 138

Re: из консоли вернуть разрешение 80х25

Сообщение v4567 » 04.04.2019 23:10

Сделал сам шрифт 16х16 но в чистой буквенноцифровой консоли он не загрузился выдав ошибку - putfont: KDFONTOP недопустимый аргумент.
Спасибо сказали:

v4567
Сообщения: 138

Re: из консоли вернуть разрешение 80х25

Сообщение v4567 » 07.04.2019 23:18

Кое что прояснилось:
Все символы можно посмотреть командой:

Код: Выделить всё

showconsolefont
Или раскрыть файл шрифта:

Код: Выделить всё

gunzip font.psf.gz   # разархивирую файл со шрифтом
psfgettable font.psf font.table  # вынимаю из него таблицу перекодировки, если локаль utf8 то таблица перекодировки будет для юникода
psf2txt font.psf font.txt  # преобразовываю файл шрифта в текстовый вид, этот файл можно редактировать в текстовом редакторе, что именно редактировать можно догадаться по содержимому этого файла
Если кому интересно, то после редактирования шрифта можно всё собрать в обратном порядке:

Код: Выделить всё

txt2psf newfont.txt newfont.psf  # создаём новый файл шрифта
mv newfont.psf newfont1.psf  # переименовываем файл шрифта
psfaddtable newfont1.psf font.table newfont.psf  # записываем таблицу перекодировки в новый фал шрифта, таблицу перекодировки то же можно отредактировать - это текстовый файл
gzip newfont.psf  # архивируем файл шрифта
setfont newfont.psf.gz  # записываем наш новый шрифт в знакогенератор, теперь будет работать этот шрифт
Там где в шрифте элементы псевдографики, (имеются ввиду ячейки знакогенератора в диапазоне 0xB0-0xDF) наверное сам знакогенератор продолжает изображение копируя последний столбец, поэтому символы псевдографики изображаются непрерывными. Остальные символы будут разделены полоской шириной в один столбец. Поэтому если нужно создать свои символы псевдографики или какие нибудь изображения, то в файле шрифта менять нужно именно эти ячейки.

И выводить, как подсказали на другом форуме, можно так:

Код: Выделить всё

echo -e "\u......"
где:

Код: Выделить всё

\u......
код юникода, можно посмотреть в вынутом файле таблицы перекодировки, например:

Код: Выделить всё

echo -e "\ua9"
выведет первый символ - копирайт, это в шрифте которые у меня, в другом шрифте может быть и другой символ.

Остались невыясненными следующие вопросы:

Как изменить в чистой текстовой консоли количество выводимых строк и столбцов, без перезагрузки, из самой консоли?
Ведь есть режимы 40х25, 160х50 и т.д.
Для этого есть команда:

Код: Выделить всё

resizecons 160x50
resizecons: resizecons: не удалось найти файл видеорежима 160х50
Вроде как надо - поставить svgalib, который принесет restoretextmode, который сгенерит файл 80x25, который...

Дистрибутив у меня devuan - это ветка от debian без systemd.
В нём в репозиториях svgalib нет. Скачал deb пакет и попытался из него использовать restoretextmode, но оказалось что нет библиотеки svgalib, её поставить так и не удалось.
Может этот файл можно создать вручную в текстовом редакторе?

Второй вопрос как изменить количество выводимых столбцов и строк в фреймбуфере, не прибегая к загрузке шрифта разрешением 16х32
fbset не подходит, так как:
например у меня 1024х768, удалось выставить и реальные и виртуальные размеры 640х400, но сам размер знакоместа не изменился, в результате стало использоваться приблизительно пол экрана с размерами знакоместа такими какими они были ранее при 1024х768.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4808
ОС: Gentoo

Re: из консоли вернуть разрешение 80х25

Сообщение /dev/random » 08.04.2019 12:34

v4567 писал:
07.04.2019 23:18
Второй вопрос как изменить количество выводимых столбцов и строк в фреймбуфере, не прибегая к загрузке шрифта разрешением 16х32
fbset не подходит, так как:
например у меня 1024х768, удалось выставить и реальные и виртуальные размеры 640х400, но сам размер знакоместа не изменился, в результате стало использоваться приблизительно пол экрана с размерами знакоместа такими какими они были ранее при 1024х768.
Ваш драйвер фреймбуфера этого не поддерживает. Или выбирайте разрешение до загрузки, или меняйте шрифт.
Спасибо сказали: