monitors.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:games_nebula 作者: yancharkin 项目源码 文件源码
def get_monitors():

    monitors_list = []

    try:
        x = os.environ['WAYLAND_DISPLAY']
        session_type = 'wayland'
    except KeyError:
        session_type = 'x11'

    if session_type == 'x11':

        # Use GTK
        ## Not working with Wayland (?)

        display_manager = Gdk.DisplayManager.get()
        display = Gdk.DisplayManager.get_default_display(display_manager)
        n_monitors = display.get_n_monitors()

        for monitor_index in range(n_monitors):
            monitor = display.get_monitor(monitor_index)

            model = monitor.get_model()
            geometry = monitor.get_geometry()
            monitors_list.append(model + ' ' + str(geometry.width) + 'x' + str(geometry.height))

            if monitor.is_primary():
                monitor_primary = model + ' ' + str(geometry.width) + 'x' + str(geometry.height)

    else:

        # Using xrandr

        proc = subprocess.Popen(['xrandr'],stdout=subprocess.PIPE)
        for line in proc.stdout.readlines():

            if re.compile(r'\b({0})\b'.format('connected'), flags=re.IGNORECASE).search(line):
                if 'primary' in line:
                    monitors_list.append(line.split(' ')[0] + ' ' + line.split(' ')[3].split('+')[0])
                else:
                    monitors_list.append(line.split(' ')[0] + ' ' + line.split(' ')[2].split('+')[0])
            if 'primary' in line:
                monitor_primary = line.split(' ')[0] + ' ' + line.split(' ')[3].split('+')[0]

        ## Hack for Wayland
        try:
            monitor_primary
        except NameError:
            monitor_primary = monitors_list[0]
        else:
            pass

    return monitors_list, monitor_primary
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号