Score:1

ฉันจะย้ายหน้าต่างไปยังจอภาพเฉพาะได้อย่างไร (Ubuntu 20.04)

ธง af

ฉันจะย้ายหน้าต่างไปยังจอภาพเฉพาะด้วยรหัสได้อย่างไร ฉันมีสองหน้าจอ โดยที่หน้าจอหนึ่งต้องเรียกใช้แอปแบบเต็มหน้าจอ และอีกหน้าจอหนึ่งต้องเล่นวิดีโอแบบเต็มหน้าจอ

HuHa avatar
es flag
`wmctrl` ที่คน (คุณ?) เพิ่มเป็นแท็กเป็นจุดเริ่มต้นที่ดี IMHO ติดตั้งแพ็คเกจนั้น (`sudo apt install wmctrl`) และดูที่หน้า man (`man wmctrl)
Score:1
ธง ru

คุณสามารถใช้ได้ xdotool เพื่อบรรลุสิ่งที่คุณต้องการ

ฉันไม่คิดว่าจะมีการตั้งค่าใด ๆ ให้ย้ายไปยังหน้าจอใดหน้าจอหนึ่ง คุณเพียงแค่ต้องตั้งค่าแต่ละตำแหน่งหน้าต่าง (ตำแหน่ง x และ y) และรูปทรงเรขาคณิต (ขนาด) ตัวอย่างเช่น เรียกใช้คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล

การค้นหา xdotool -- ชื่อ "WINDOW TITLE HERE" getwindowgeometry

จากนั้นย้ายหน้าต่างไปรอบๆ และระหว่างจอภาพต่างๆ และคุณจะเห็นว่ามันเป็นเพียงตำแหน่ง x/y (บนซ้าย) ที่แตกต่างกัน ขึ้นอยู่กับการตั้งค่าและความละเอียดของจอภาพของคุณ

คุณจึงสามารถทดลองและเขียนโค้ดสคริปต์เพื่อรับรหัสหน้าต่างที่เกี่ยวข้อง จากนั้นตั้งค่าตำแหน่งด้วย เลื่อนหน้าต่าง คำสั่งและรูปทรงเรขาคณิตด้วย ขนาดหน้าต่าง สั่งการ.

codlord avatar
ru flag
ฉันเพิ่งเห็นว่าคำถามของคุณติดแท็กด้วย `wmctrl` ฉันไม่คุ้นเคยกับสิ่งนั้นมากนัก แต่บางทีมันอาจจะเป็นตำแหน่ง/รูปทรงเรขาคณิตแบบเดียวกัน ลอง `wmctrl -p -G -l` เพื่อแสดงหน้าต่างที่มีรูปทรงเรขาคณิตและย้ายไปมาระหว่างจอภาพเพื่อดูว่ามีการเปลี่ยนแปลงอะไรบ้างและมีการเปลี่ยนแปลงอย่างไร
Score:0
ธง af

ฉันสร้างรหัสที่ค่อนข้างซับซ้อนนี้เพื่อค้นหาหน้าต่างที่ฉันต้องการย้ายไปยังหน้าจอเฉพาะที่กำหนดโดยความกว้างเป็นมม. ของจอภาพ (มันจะปรับขนาดเป็นความละเอียดที่ถูกต้องและตั้งค่าแอปเต็มหน้าจอด้วย):

#!/usr/bin/env python3
นำเข้ากระบวนการย่อย
เวลานำเข้า


def ได้รับ (cmd): กลับ subprocess.check_output (cmd).decode ('utf-8')


def ปรับความละเอียด (ชื่อ, ความละเอียด): # ชื่อ = DP-2, ความละเอียด: 1920x1080
    รับ (['xrandr', '--output', ชื่อ, '--mode', res])


def edit_window (มอนิเตอร์, window_name, ฟังก์ชัน):
    พิมพ์ ('ย้าย', window_name, 'ถึง', จอภาพ)
    รับ (['wmctrl', '-F', '-r', window_name, '-e', '100,' +
        จอภาพ['x'] + ',' + จอภาพ['y'] + ',600,600'])
    รับ (['wmctrl', '-F', '-r', window_name, '-b', ฟังก์ชัน])


def get_monitors():
    screendata = [l.split() สำหรับ l ใน get(['xrandr', '--current']
                                         ).replace('primary', '').splitlines() ถ้า 'เชื่อมต่อ' ใน l]
    จอภาพ = []

    สำหรับผมในช่วง (len (ข้อมูลหน้าจอ)):
        จอภาพ = dict()
        [ขนาด, x, y] = ข้อมูลหน้าจอ[i][2].split('+')
        จอภาพ = {
            'ชื่อ': ข้อมูลหน้าจอ[i][0],
            'ความกว้าง': ข้อมูลหน้าจอ[i][-3],
            'ความสูง': ข้อมูลหน้าจอ[i][-1],
            'ขนาด': ขนาด,
            'x': x,
            'ย': ย
        }
        monitors.append (มอนิเตอร์)

    ส่งคืนจอภาพ


def find_element_where (องค์ประกอบ คีย์ ค่า):
    ส่งคืนถัดไป ((รายการสำหรับรายการในองค์ประกอบถ้ารายการ [คีย์] == ค่า), ไม่มี)


def window_info_to_dict (ข้อมูล):
    _, _, x, y, ความกว้าง, ความสูง, _, *ชื่อ = info.split()
    กลับ {'x': x, 'y': y, 'ความกว้าง': ความกว้าง, 'ความสูง': ความสูง, 'ชื่อ': ' '.join(ชื่อ)}


def get_window_info():
    รายการส่งคืน (แผนที่ (window_info_to_dict, รับ (['wmctrl', '-l', '-G']).splitlines()))


# ค่าคงที่:
main_monitor_width = '256 มม.'
controller_app = 'ชื่อ_of_app'
video_player = 'เครื่องเล่นสื่อ VLC'
Correct_Resolution = '1920x1080'

# ตัวแปร:
did_remove_fullscreen = เท็จ

ในขณะที่ทรู:
    พยายาม:
        # รับจอภาพ:
        จอภาพ = get_monitors()
        main_monitor = ถัดไป (
            (มอนิเตอร์สำหรับมอนิเตอร์ในมอนิเตอร์ ถ้ามอนิเตอร์['width'] == main_monitor_width), ไม่มี)
        รอง_monitor = ถัดไป (
            (มอนิเตอร์สำหรับมอนิเตอร์ในมอนิเตอร์ ถ้ามอนิเตอร์['width'] != main_monitor_width), ไม่มี)

        # พิมพ์ (main_monitor)
        # พิมพ์ (secondary_monitor)

        # รับ windows:
        window_info = get_window_info()

        controller_app_window_info = find_element_where(
            window_info, 'ชื่อ', controller_app)
        video_player_window_info = find_element_where(
            window_info, 'ชื่อ', video_player)

        # ตรวจสอบว่าจอภาพรองมีขนาดที่เหมาะสมหรือไม่:
        ถ้าsecondary_monitor และsecondary_monitor['size'] != correct_ resolution:
            พิมพ์ ('ความละเอียดไม่ถูกต้อง',secondary_monitor)
            ปรับความละเอียด (secondary_monitor ['ชื่อ'], การแก้ไขความละเอียด)

        # พิมพ์ (controller_app_window_info)
        # พิมพ์ (video_player_window_info)

        ถ้า main_monitor:
            ถ้า controller_app_window_info['x'] != main_monitor['x'] หรือ controller_app_window_info['y'] != main_monitor['y'] หรือ controller_app_window_info['width'] != '1920' หรือ controller_app_window_info['height'] ! = '1080':
                พิมพ์ ('แอพควบคุมอยู่ในตำแหน่งไม่ถูกต้อง')
                edit_window(main_monitor, controller_app, 'เพิ่ม,เต็มหน้าจอ')
        อื่น:
            พิมพ์ ('ไม่มีจอภาพหลัก')

        ถ้าsecondary_monitor:
            ถ้า video_player_window_info['x'] !=secondary_monitor['x'] หรือ video_player_window_info['y'] !=secondary_monitor['y'] หรือ video_player_window_info['width'] != '1920' หรือ video_player_window_info['height'] ! = '1080':
                พิมพ์ ('เครื่องเล่นวิดีโออยู่ในตำแหน่งไม่ถูกต้อง')
                edit_window(secondary_monitor, video_player, 'เพิ่ม,เต็มหน้าจอ')
                did_remove_fullscreen = เท็จ
        อื่น:
            พิมพ์ ('ไม่มีจอภาพรอง')
            ถ้า main_monitor ไม่ใช่ did_remove_fullscreen:
                edit_window(main_monitor, video_player, 'ลบ,เต็มหน้าจอ')
                did_remove_fullscreen = จริง

    ยกเว้น ข้อยกเว้นเป็น e:
        พิมพ์ ('เกิดข้อผิดพลาด', จ)

    เวลานอน(10)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา