Puncte:1

Cum pot muta o fereastră pe un anumit monitor (Ubuntu 20.04)?

drapel af

Cum pot muta o fereastră pe un anumit monitor cu cod? Am două ecrane în care unul trebuie să ruleze o aplicație pe ecran complet, iar celălalt trebuie să redea un videoclip pe tot ecranul.

HuHa avatar
drapel es
Acel `wmctrl` pe care cineva (tu?) l-a adăugat ca etichetă este un bun punct de plecare. Instalați acel pachet (`sudo apt install wmctrl`) și uitați-vă la pagina de manual (`man wmctrl).
Puncte:1
drapel ru

Poți să folosești xdotool pentru a realiza ceea ce îți dorești.

Nu cred că există vreo setare pentru a trece la un ecran sau altul, trebuie doar să setați fiecare poziție a ferestrei (poziția x și y) și geometria (dimensiunea). De exemplu, rulați următoarea comandă într-o fereastră de terminal

căutare xdotool --name „TITLUL FEREASTREI AICI” getwindowgeometry

Și apoi mutați fereastra în jurul și între diferite monitoare și veți vedea că este doar o poziție x/y diferită (sus-stânga), în funcție de configurația și rezoluția monitorului.

Deci, puteți experimenta și codifica scripturi pentru a obține ID-urile relevante ale ferestrei și apoi setați poziția cu mișcarea ferestrei comandă și geometrie cu dimensiunea ferestrei comanda.

codlord avatar
drapel ru
Tocmai am văzut că întrebarea ta este etichetată cu `wmctrl`. Nu sunt prea familiarizat cu asta, dar poate că este același tip de poziție/geometrie. Încercați `wmctrl -p -G -l` pentru a lista ferestrele cu geometrie și deplasați-vă între monitoare pentru a vedea ce modificări și cum se schimbă.
Puncte:0
drapel af

Am creat acest cod destul de complicat pentru a găsi ferestrele pe care am vrut să le mutăm pe un anumit ecran determinat de lățimea în mm a monitorului (se va redimensiona și la rezoluția corectă și se va seta aplicația pe ecran complet):

#!/usr/bin/env python3
subproces de import
timpul de import


def get(cmd): return subprocess.check_output(cmd).decode('utf-8')


def adjust_resolution(nume, rezoluție): # nume = DP-2, rezoluție: 1920x1080
    get(['xrandr', '--output', nume, '--mode', res])


def edit_window(monitor, window_name, function):
    print('deplasare', nume_fereastra, 'la', monitor)
    get(['wmctrl', '-F', '-r', nume_fereastră, '-e', '100,' +
        monitor['x'] + ',' + monitor['y'] + ',600.600'])
    get(['wmctrl', '-F', '-r', nume_fereastră, '-b', funcţie])


def get_monitors():
    screendata = [l.split() pentru l în get(['xrandr', '--current']
                                         ).replace('primar', '').splitlines() dacă 'conectat' în l]
    monitoare = []

    pentru i în interval (len (screendata)):
        monitor = dict()
        [mărime, x, y] = date ecran[i][2].split('+')
        monitor = {
            „nume”: date de ecran[i][0],
            „lățime”: date de ecran[i][-3],
            „înălțime”: date de ecran[i][-1],
            „dimensiune”: dimensiune,
            'x': x,
            'y': y
        }
        monitors.append(monitor)

    returnează monitoare


def find_element_where(elemente, cheie, valoare):
    return next((articol pentru element în elemente dacă element[cheie] == valoare), Niciunul)


def window_info_to_dict(info):
    _, _, x, y, lățime, înălțime, _, *nume = info.split()
    return {'x': x, 'y': y, 'width': width, 'height': height, 'name': ''.join(name)}


def get_window_info():
    listă returnată(hartă(window_info_to_dict, get(['wmctrl', '-l', '-G']).splitlines()))


# constante:
main_monitor_width = '256mm'
controller_app = „numele_aplicației”
video_player = „VLC media player”
rezoluție_corectă = „1920x1080”

# Variabile:
did_remove_fullscreen = Fals

în timp ce este adevărat:
    încerca:
        # Obțineți monitoare:
        monitoare = get_monitors()
        main_monitor = urmatorul(
            (monitor pentru monitor în monitoare dacă monitor['width'] == main_monitor_width), niciunul)
        secundar_monitor = următorul(
            (monitor pentru monitor în monitoare dacă monitor['width'] != main_monitor_width), Niciunul)

        # print(main_monitor)
        # print(secondary_monitor)

        # Obțineți Windows:
        window_info = get_window_info()

        controller_app_window_info = find_element_where(
            window_info, „nume”, controller_app)
        video_player_window_info = find_element_where(
            window_info, „nume”, video_player)

        # Verificați dacă monitorul secundar are dimensiunea potrivită:
        dacă secondary_monitor și secondary_monitor['size'] != corect_resolution:
            print('Rezoluție greșită', secondary_monitor)
            adjust_resolution(secondary_monitor['nume'], corect_resolution)

        # print(controller_app_window_info)
        # print(video_player_window_info)

        if main_monitor:
            dacă controller_app_window_info['x'] != main_monitor['x'] sau controller_app_window_info['y'] != main_monitor['y'] sau controller_app_window_info['width'] != '1920' sau controller_app_window_info['height'] ! = '1080':
                print('Aplicația de control nu este poziționată corect')
                edit_window(main_monitor, controller_app, 'add, fullscreen')
        altceva:
            print('Fără monitor principal')

        dacă secundar_monitor:
            dacă video_player_window_info['x'] != secondary_monitor['x'] sau video_player_window_info['y'] != secondary_monitor['y'] sau video_player_window_info['width'] != '1920' sau video_player_window_info !['height'] = '1080':
                print('Playerul video nu este pozitionat corect')
                edit_window(secondary_monitor, video_player, 'add, fullscreen')
                did_remove_fullscreen = Fals
        altceva:
            print('Fără monitor secundar')
            dacă main_monitor și nu did_remove_fullscreen:
                edit_window(main_monitor, video_player, 'remove, fullscreen')
                did_remove_fullscreen = Adevărat

    cu excepția excepției ca e:
        print('A apărut o eroare', e)

    timp.somn (10)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.