Размер окна приложения linux

Как задать размер окна консольного приложения C++ в Linux?

Здравствуйте. Захотел написать консольную игрушку на С++. Первым делом решил установить размеры окна консоли. Google сразу пришел на помощь, но проблема в том что все рецепты используют библиотеку windows.h, а на моей машине стоит Ubuntu 16.04. Буду признателен за помощь.

Концептуально это не верное решение — ваша программа может запросить текущие размеры, но не устанавливать.

printf ‘\e[8;50;100t’ из sh установит размер xterm в 50×100 символов (для «стандартного» в Ubuntu gnome-terminal и fce4-terminal тоже работает).

Вообще, размер самого окна тоже можно установить. Например, это делает утилита wmctrl. Можете использовать ее, или посмотреть как она это делает в исходниках.

Если приложение консольное, консолью может быть и удаленное подключение и принтер и ещё много чего, что не может поменять свой размер. Поэтому правильным решением будет написание оконного/GUI приложения.

1 ответ 1

К счастью, еще разработчики xterm, наряду с реализацией огромного количества управляющих последовательностей (Control Sequences) типичных для распространенных текстовых терминалов (управление курсором, цветом, набором символов, вставкой, удалением и сдвигом текста и т.д. и т.п.), подумали об аналогичных последовательностях для перемещения окна эмулятора и изменении его размера на экране оконной системы X-windows (в приведенной выше ссылке их можно найти поиском по тексту Window manipulation).

Для изменения размера окна в символах используется последовательность:

ESC [ 8; height; width; t

Где ESC — это символ с кодом 033 (восьмеричный) 27 (десятичный) или «\e» в строке.

Вообще, в том же документе для последовательность символов ESC [ используется термин CSI (Control Sequince Introducer)
(другие часто встречающиеся в управлении терминалом последовательности — DCS ESC P (Device Control String), OSC ESC ] (Operating System Command) и ST ESC \ (String Terminator)).

Маленькая демо программа на C/C++

#include #include #define COLS 24 #define ROWS 80 int main (int ac, char *av[])

Хотя в документе написано, что если width или height (ширина и высота (количество строк)) опущены, то используется их текущее значение, а если равны нулю, то берутся некоторые значения по умолчанию (display’s height or width), но в моих экспериментах с bash-скриптом resize.sh

Читайте также:  Выключить контроллер usb linux

в обеих случаях окно менялось на стандартный размер 24 х 80 символов.

В Ubuntu 16.04.1 LTS изменение размера окна работает по крайней мере в терминалах gnome-terminal и xfce4-terminal (а вот в xterm версии XTerm(322) ничего не меняется(. )).

Источник

Re: Ubuntu как задать размер нового окна вручную?

народ! ну пишу я в запуске приложений gedit или gnome-terminal, че надо дописать чтоб был определенный размер?

Re: Ubuntu как задать размер нового окна вручную?

Re: Ubuntu как задать размер нового окна вручную?

если не знает, что такое -geometry, то ссзб

Re: Ubuntu как задать размер нового окна вручную?

Компиз юзай.Он может выставлять желаемые размеры для окон приложений,независимо от того, понимают они —geometry или нет.И в Убунте он стоит по дефолту, так что «без дополнительного п/о».

Re: Ubuntu как задать размер нового окна вручную?

а можно ли в консоли выставить размеры для уже запущенного окна под компизом?

Re: Ubuntu как задать размер нового окна вручную?

Теоретически -да,я думаю (хотя таким не задавался и потому не пробовал).Параметры через Gсonf же задаются,ну и можно вероятно gconftool —type (нужный тип) —set (ключ) (значение) Для гноме-панели изменение значений таким способом на ходу работает, во всяком случае.

Re: Ubuntu как задать размер нового окна вручную?

а как именно задавать? gnome-terminal —geometry -10-20? и как компизом настраивать?

Re: Ubuntu как задать размер нового окна вручную?

(приступ телепатии) ТСу нужен тайловый WM. Но он его не осилит.

Источник

Display scaling в Linux. Часть 1 — системные настройки

Дисплеи с высокой плотностью пикселей уже давно не редкость. И для того, чтобы UI не выглядел слишком мелко, применяется масштабирование. В разных системах используются разные подходы и имеются различные возможности настроек. Но одно объединяет их все — безмерное количество кривизны, костылей и глюков. Посмотрим как на сегодняшний день обстоит ситуация в лагере Linux.

Цель первой части — обрисовать ситуацию с настройками масштабирования в системе из коробки, без лишних плясок с бубном — так, как ее видит обычный пользователь.

Десктопных окружений великое множество, проверить все займет огромное количество времени, поэтому критерии выбора такие — находится в активной разработке и не требует отдельной установки, т.е. идет в комплекте с каким-н дистрибутивом. Ну и конечно оно должно быть более мене известным, потому выбирал просто из перечня в таблице.

Дистрибутивы для обзора были использованы следующие: Ubuntu и Fedora для Gnome, openSUSE для KDE, Manjaro для XFCE, Debian для MATE, Mint для Cinnamon, Ubuntu для LXQt и Deepin с его одноименным окружением.

Gnome

Поддерживает независимые настройки масштабирования для каждого монитора.

Доступные коэффициенты рассчитываются в зависимости от разрешения монитора, для 4K возможны варианты от 100% до 400%, для FullHD — 100% и 200%.

Читайте также:  Ubuntu gamepack linux os

Дробное масштабирование (Fractional scaling) поддерживается частично. Возможность установки дробного масштабирования в различных дистрибутивах либо присутствует в настройках дисплея (например в Ubuntu), либо скрыта (как в Fedora). Но даже если опция скрыта, включить этот режим можно с помощью команды

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

Доступные коэффициенты также рассчитываются в зависимости от разрешения монитора, для 4K возможны варианты от 100% до 400% с шагом 25%, для FullHD — от 100% до 225%.

Поскольку актуальная версия Gnome использует протокол Wayland, то для полноценной работы приложения должны поддерживать эту технологию. Для обычных X11 приложений написанных с использованием UI-фреймворков, которые не поддерживают Wayland используется реализация X Server под названием XWayland. К сожалению дробное масштабирование среди того что не поддерживается в режиме совместимости, в этом случае X11 приложения отрисовываются в 100% масштабе а затем просто растягиваются до необходимых размеров, даже если в этом режиме выбран целочисленный коэффициент. Когда то за подобное ругали Windows. лет десять назад.

Изменения настроек применяются сразу, log out не требуется.

В окне справа все размытоВ обычном режиме все в порядке

KDE

В сессии X11 не поддерживает независимые настройки масштабирования для нескольких мониторов.

Дробное масштабирование поддерживается, доступные коэффициенты от 100% до 300% (не зависят от разрешения) с шагом 25%.

С ходу бросается в глаза что высота панели задач не меняется.

Изменения требуют сделать restart, по факту достаточно перелогиниться.

В Wayland сессии можно указать независимые настройки для разных мониторов, масштабирование дробное и по умолчанию X11 приложения будут отображаться с размытием так же как и в Gnome. Но начиная с Plasma 5.26 добавилась опция позволяющая X11 приложениям масштабироваться самостоятельно, в этом случае все работает прекрасно и никакого размытия. С панелью задач тоже все в порядке.

Новая опция в 5.26

XFCE

Тут все плохо. Поддержка с виду как бы есть но лучше бы ее совсем не было, такое впечатление что код не то что не тестировали, а даже не запускали.

Независимые настройки для каждого монитора есть, также есть секретная опция Window Scaling в Appearance.

Дробное масштабирование с виду поддерживается, но теперь самое интересное — ставим в первом окне коэффициент 1.5x вместо 1x и… весь UI уменьшается. Причем чем больше коэффициент тем мельче будет UI

Вот так выглядит масштаб 2x на 15

Взяв линейку легко выявить что все размеры не умножаются на scale factor, а делятся на него т.е. Вместо 150% получаем 66%, вместо 200% — 50% и.т.п. Что интересно, настройки позволяют указывать произвольное значение от 0.1 до 10.0 с шагом 0.1. Если указать значение меньше единицы то UI таки увеличится (например 0.7 даст примерно 143%), но размыто будет абсолютно все. Ситуацию немного улучшает секретная опция Window scale, там всего два варианта 1x и 2x, если выбрать 2x, то размер окон будет умножен на 2 и поделен на коэффициент из настроек дисплея. Тогда коэффициент 1.5 даст масштаб 133%, а коэффициент 2 сократится до 100% и в этом случае проще оставить везде единицы.

Читайте также:  Параметры ядра astra linux

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

MATE

Не поддерживает независимые настройки масштабирования для нескольких мониторов.

Также нет гибкости выбора коэффициентов, только Regular (x1) или HiDPI (x2).

Среди настроек дисплея эту опцию искать бесполезно, она запрятана довольно далеко и неочевидно в System -> Preferences -> Look And Feel -> MATE Tweak.

Изменения применяются сразу.

Cinnamon

Поддерживает независимые настройки масштабирования для нескольких мониторов.

Поддерживает дробное масштабирование, эта опция помечена как experimental, но по умолчанию включена. Отключение дробного масштабирования отключит также и возможность независимой настройки для разных мониторов. Для дробного масштабирования диапазон настроек от 100% до 200% с шагом 25% независимо от разрешения монитора. При отключенном дробном масштабировании диапазон зависит от разрешения, так же как и на Gnome — от 100% до 400% для 4K и 100% и 200% для FullHD.

Изменения применяются сразу.

LXQt

Не поддерживает независимые настройки масштабирования для нескольких мониторов.

Настройки здесь снова бесполезно искать среди конфигурации дисплея, они запрятаны далеко. Можно указать дробный коэффициент — произвольное значение от 1.0 до 4.0 с точностью в два знака. Заголовки окон не масштабируются.

Применение изменений требует перелогиниться.

Deepin

Окружение используется в одноименном китайском дистрибутиве. До недавних пор не знал о его существовании, включил в список только потому что он фигурирует в таблице из Википедии, оказалось что по визуальному оформлению пожалуй один из лучших среди перечисленного.

Не поддерживает независимые настройки масштабирования для нескольких мониторов.

Дробное масштабирование поддерживается, доступные коэффициенты зависят от подключенных мониторов. Например если использовать только 4К то коэффициенты от 1.0 до 3.0 с шагом 0.25, а если в дополнение к 4К подключить FullHD, то доступные коэффициенты только 1.0 и 1.25.

Применение настроек требует перелогиниться.

Вывод

Из всех рассматриваемых окружений только Cinnamon и KDE (начиная с Plasma 5.26) масштабируют наиболее адекватно, можно настроить например 150% для High-DPI монитора (мне например 200% слишком много), и оставить 100% для второго Low-DPI монитора, и это будет работать.

Вторая часть будет о том, как программно определить системные настройки масштабирования из приложения. Поскольку в Linux нет единого API для этого, то зоопарк с этим творится еще похлеще.

Источник

Оцените статью
Adblock
detector