Điểm:1

Làm cách nào tôi có thể di chuyển cửa sổ sang một màn hình cụ thể (Ubuntu 20.04)?

lá cờ af

Làm cách nào để di chuyển cửa sổ sang một màn hình cụ thể bằng mã? Tôi có hai màn hình trong đó một màn hình cần chạy ứng dụng ở chế độ toàn màn hình và màn hình còn lại cần phát video ở chế độ toàn màn hình.

HuHa avatar
lá cờ es
`wmctrl` mà ai đó (bạn?) Đã thêm làm thẻ là một điểm khởi đầu tốt IMHO. Cài đặt gói đó (`Sudo apt install wmctrl`) và xem trang man (`man wmctrl).
Điểm:1
lá cờ ru

Bạn có thể dùng xdotool để đạt được những gì bạn muốn.

Tôi không nghĩ có bất kỳ cài đặt nào để chuyển sang màn hình này hay màn hình khác, bạn chỉ cần đặt từng vị trí cửa sổ (vị trí x và y) và hình học (kích thước). Ví dụ: chạy lệnh sau trong cửa sổ đầu cuối

tìm kiếm xdotool --name "WINDOW TITLE HERE" getwindowgeometry

Và sau đó di chuyển cửa sổ xung quanh và giữa các màn hình khác nhau và bạn sẽ thấy rằng đó chỉ là một vị trí x/y (trên cùng bên trái) khác nhau tùy thuộc vào thiết lập và độ phân giải màn hình của bạn.

Vì vậy, bạn có thể thử nghiệm và viết mã tập lệnh để lấy ID cửa sổ có liên quan, sau đó đặt vị trí bằng di chuyển cửa sổ lệnh và hình học với kích thước cửa sổ chỉ huy.

codlord avatar
lá cờ ru
Tôi vừa thấy câu hỏi của bạn được gắn thẻ `wmctrl`. Tôi không quá quen thuộc với điều đó nhưng có lẽ đó là cùng một loại vị trí/hình học. Hãy thử `wmctrl -p -G -l` để liệt kê các cửa sổ có dạng hình học và di chuyển giữa các màn hình để xem những gì thay đổi và thay đổi như thế nào.
Điểm:0
lá cờ af

Tôi đã tạo mã khá phức tạp này để tìm các cửa sổ mà tôi muốn chuyển đến một màn hình cụ thể được xác định bởi chiều rộng tính bằng mm của màn hình (nó cũng sẽ thay đổi kích thước thành độ phân giải chính xác và đặt ứng dụng ở chế độ toàn màn hình):

#!/usr/bin/env python3
quy trình con nhập khẩu
thời gian nhập khẩu


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


def điều chỉnh độ phân giải (tên, độ phân giải): # tên = DP-2, độ phân giải: 1920x1080
    get(['xrandr', '--output', name, '--mode', res])


def edit_window(màn hình, window_name, chức năng):
    in ('di chuyển', window_name, 'đến', màn hình)
    get(['wmctrl', '-F', '-r', window_name, '-e', '100,' +
        màn hình['x'] + ',' + màn hình['y'] + ',600,600'])
    get(['wmctrl', '-F', '-r', window_name, '-b', function])


def get_monitor():
    screendata = [l.split() for l in get(['xrandr', '--current']
                                         .replace('chính', '').splitlines() nếu ' được kết nối' trong l]
    màn hình = []

    cho tôi trong phạm vi (len (screendata)):
        màn hình = dict()
        [size, x, y] = screendata[i][2].split('+')
        màn hình = {
            'tên': screendata[i][0],
            'chiều rộng': dữ liệu màn hình[i][-3],
            'chiều cao': dữ liệu màn hình[i][-1],
            'kích thước': kích thước,
            'x': x,
            'y': y
        }
        màn hình.append(màn hình)

    trả lại màn hình


def find_element_where(phần tử, khóa, giá trị):
    trả về tiếp theo ((mục cho mục trong phần tử nếu mục [key] == giá trị), Không có)


def window_info_to_dict(thông tin):
    _, _, x, y, chiều rộng, chiều cao, _, *name = info.split()
    return {'x': x, 'y': y, 'width': width, 'height': height, 'name': ' '.join(name)}


chắc chắn get_window_info():
    danh sách trả về(map(window_info_to_dict, get(['wmctrl', '-l', '-G']).splitlines()))


# Hằng số:
main_monitor_width = '256mm'
controller_app = 'tên_của_ứng dụng'
video_player = 'Trình phát đa phương tiện VLC'
đúng_độ phân giải = '1920x1080'

# Biến:
did_remove_fullscreen = Sai

trong khi Đúng:
    cố gắng:
        # Nhận màn hình:
        màn hình = get_monitor()
        main_monitor = tiếp theo (
            (giám sát cho màn hình trong màn hình nếu monitor['width'] == main_monitor_width), Không có)
        secondary_monitor = tiếp theo(
            (giám sát cho màn hình trong màn hình nếu monitor['width'] != main_monitor_width), Không có)

        # in(main_monitor)
        # in(secondary_monitor)

        # Nhận cửa sổ:
        window_info = get_window_info()

        controller_app_window_info = find_element_where(
            window_info, 'tên', controller_app)
        video_player_window_info = find_element_where(
            window_info, 'tên', video_player)

        # Kiểm tra xem màn hình phụ có đúng kích cỡ không:
        nếu secondary_monitor và secondary_monitor['size'] != true_resolution:
            print('Độ phân giải sai', secondary_monitor)
            điều chỉnh_độ phân giải (secondary_monitor ['tên'], độ phân giải chính xác)

        # in(controller_app_window_info)
        # in(video_player_window_info)

        nếu main_monitor:
            if controller_app_window_info['x'] != main_monitor['x'] or controller_app_window_info['y'] != main_monitor['y'] or controller_app_window_info['width'] != '1920' or controller_app_window_info['height'] ! = '1080':
                print('Ứng dụng điều khiển không được định vị chính xác')
                edit_window(main_monitor, controller_app, 'add,fullscreen')
        khác:
            print('Không có màn hình chính')

        nếu secondary_monitor:
            if video_player_window_info['x'] != secondary_monitor['x'] or video_player_window_info['y'] != secondary_monitor['y'] or video_player_window_info['width'] != '1920' or video_player_window_info['height'] ! = '1080':
                print('Trình phát video không được đặt đúng vị trí')
                edit_window(secondary_monitor, video_player, 'add,fullscreen')
                did_remove_fullscreen = Sai
        khác:
            print('Không có màn hình phụ')
            nếu main_monitor chứ không phải did_remove_fullscreen:
                edit_window(main_monitor, video_player, 'xóa, toàn màn hình')
                did_remove_fullscreen = Đúng

    ngoại trừ Ngoại lệ như e:
        print('Đã xảy ra lỗi', e)

    time.sleep(10)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.