ri_gilfanov
@ri_gilfanov
Web- and desktop-developer

Как осуществить полноэкранный запуск приложения на Python GTK3 в Debian 9.5 (i386) без установленной среды рабочего стола?

В Debian 9.5 (i386) без установленной оболочки не срабатывает метод fullscreen у объекта класса Gtk.Window:
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk, Gtk, GdkPixbuf


class LockScreen(Gtk.Window):
    def __init__(self, app, config):
        super().__init__(name='lock_screen')
        self.app = app
        cssProvider = Gtk.CssProvider()
        cssProvider.load_from_path('./static/styles.css')
        screen = Gdk.Screen.get_default()
        styleContext = Gtk.StyleContext()
        styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
        self.box = Gtk.Box(halign=Gtk.Align.CENTER, orientation=Gtk.Orientation.VERTICAL, parent=self,
                           valign=Gtk.Align.CENTER, name='lock_screen_box')
        self.tonb_label = Gtk.Label('Тюменская Областная Научная Библиотека', justify=Gtk.Justification.CENTER,
                                    name='tonb_label', parent=self.box)
        self.icons = {
            name: GdkPixbuf.Pixbuf.new_from_file_at_scale('./static/icons/{0}.svg'.format(name), 96, 96, True)
            for name in [
                'app_started',
                'network_connected',
                'network_disconnected',
                'workstation_locked',
                'workstation_unlocked',
                'workstation_shutdown',
                'reader_binded',
                'error',
            ]
        }
        self.status_icon = Gtk.Image(name='status_icon', parent=self.box)
        self.status_label = Gtk.Label(justify=Gtk.Justification.CENTER, name='status_label', parent=self.box,
                                      width_chars=56)
        self.fullscreen()
        self.connect("destroy", Gtk.main_quit)
        self.show_all()

    ...


Окно приложения на Python Gtk3 получает минимальный размер:
IN4PPE7TseY.jpg

Однако, вот freerdp запускается в полноэкранном режиме (ключ -f) как надо:
jDrr24ZVLK8.jpg

К тому же, в Linux Mint 18.3 Cinnamon всё работает как надо, приложение на Python Gtk3 запускается в полноэкранном режиме без проблем.

Пакеты установленные в Debian для работы Gtk3:
xorg python3-gi python3-click python3-gi-cairo python3-cairo gir1.2-gtk-3.0 libglib2.0-dev libcairo2-dev libgirepository1.0-dev

Запуск приложения осуществляется через lightdm.

/etc/lightdm/lightdm.conf
greeter-session=defender_greeter

/usr/share/xgreeters/defender_greeter.desktop
[Desktop Entry]
Name=TONB Thin Defender
Comment=No comments
Exec=/bin/bash /home/defender/thin-defender/thin_defender/run.sh
Type=Application
X-Ubuntu-Gettext-Domain=lightdm


/home/defender/thin-defender/thin_defender/run.sh
cd /home/defender/thin-defender/thin_defender
/home/defender/thin-defender/.venv/bin/python3 /home/defender/thin-defender/thin_defender/manage.py run_app --config test



UPDATE

Ряд методов Gtk.Window для корректной работы нуждаются в оконном менеджере (window manager), в том числе и метод fullscreen.

Возможные пути решения проблемы: попробовать обойтись без данных методов или установить какой-нибудь оконный менеджер.
  • Вопрос задан
  • 600 просмотров
Решения вопроса 1
ri_gilfanov
@ri_gilfanov Автор вопроса
Web- and desktop-developer
Пробовал поставить и настроить openbox в качестве менеджера окон, но запарился с конфигами.

Проще оказалось не использовать зависящий от менеджеров окон метод fullscreen():
self.fullscreen()
А получить текущую ширину и высоту дисплея у Gdk.Screen и задать с помощью метода resize():
self.resize(Gdk.Screen.width(), Gdk.Screen.height())

Результат:
YvkZsPd_fns.jpg
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
Без какой "оболочки"? Без Х? Без них ничего графического не стартует никогда :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы