108 lines
3.4 KiB
Python
Executable File
108 lines
3.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# virtualdisplay.in
|
|
#
|
|
# Copyright 2024 Unknown
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
lib_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib')
|
|
sys.path.insert(0, lib_dir)
|
|
|
|
from logging.handlers import TimedRotatingFileHandler
|
|
|
|
config_home = os.environ.get('XDG_CONFIG_HOME', '~/.config')
|
|
config_dir = os.path.expanduser(config_home)
|
|
state_home = os.environ.get('XDG_STATE_HOME', '~/.local/state')
|
|
state_dir = os.path.expanduser(state_home)
|
|
breezy_state_dir = os.path.join(state_dir, 'breezy_gnome')
|
|
log_dir = os.path.join(breezy_state_dir, 'logs/ui')
|
|
os.makedirs(log_dir, exist_ok=True)
|
|
|
|
logger = logging.getLogger('breezy_ui')
|
|
logger.setLevel(logging.INFO)
|
|
logname = os.path.join(log_dir, "breezy_desktop.log")
|
|
handler = TimedRotatingFileHandler(logname, when="midnight", backupCount=30)
|
|
handler.suffix = "%Y%m%d"
|
|
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
handler.setFormatter(formatter)
|
|
logger.addHandler(handler)
|
|
|
|
import argparse
|
|
import sys
|
|
import signal
|
|
import pydbus
|
|
import time
|
|
|
|
VERSION = '@VERSION@'
|
|
|
|
xdg_data_home = os.getenv('XDG_DATA_HOME', os.path.join(os.path.expanduser('~'), '.local', 'share'))
|
|
appdir = os.getenv('APPDIR', xdg_data_home)
|
|
locale_dir = os.path.join(appdir, 'locale')
|
|
pkgdatadir = os.path.join(appdir, 'breezydesktop')
|
|
sys.path.insert(1, pkgdatadir)
|
|
|
|
import gi
|
|
|
|
gi.require_version('GLib', '2.0')
|
|
|
|
from gi.repository import GLib
|
|
|
|
def graceful_shutdown(signum, frame):
|
|
global virtual_display_instance
|
|
global loop
|
|
|
|
if virtual_display_instance is not None:
|
|
virtual_display_instance.terminate()
|
|
|
|
def _on_display_closed():
|
|
global loop
|
|
loop.quit()
|
|
|
|
def create_display(width, height, framerate):
|
|
global virtual_display_instance
|
|
|
|
virtual_display_instance = VirtualDisplay(width, height, framerate, _on_display_closed)
|
|
virtual_display_instance.create()
|
|
|
|
if __name__ == "__main__":
|
|
from breezydesktop import virtualdisplay
|
|
from breezydesktop.virtualdisplay import VirtualDisplay
|
|
|
|
global virtual_display_instance
|
|
global loop
|
|
|
|
parser = argparse.ArgumentParser(description="Virtual display arguments")
|
|
parser.add_argument("--height", type=int, required=True, help="Height of the display")
|
|
parser.add_argument("--width", type=int, required=True, help="Width of the display")
|
|
parser.add_argument("--framerate", type=int, default=60, help="Framerate of the display")
|
|
args = parser.parse_args()
|
|
|
|
signal.signal(signal.SIGTERM, graceful_shutdown)
|
|
signal.signal(signal.SIGINT, graceful_shutdown)
|
|
|
|
loop = GLib.MainLoop()
|
|
|
|
try:
|
|
GLib.idle_add(create_display, args.width, args.height, args.framerate)
|
|
loop.run()
|
|
except Exception as e:
|
|
logger.error(f"Error in main loop: {e}")
|
|
sys.exit(1) |