如何在我正在工作的同一顯示器中開啟檔案?

如何在我正在工作的同一顯示器中開啟檔案?

我已將 LCD 連接到我的筆記型電腦。當我嘗試在 Nautilus 中開啟檔案時,目標應用程式會在我的筆記型電腦顯示器中打開,而不是在第二個顯示器(其中打開了 nautilus 視窗)中。

我不想更改預設顯示。我想在我正在工作的顯示器中開啟視窗。如果我的檔案管理器位於外部顯示器中,我希望在那裡開啟檔案。

的輸出xrandr

Screen 0: minimum 320 x 200, current 3286 x 1080, maximum 32767 x 32767
eDP1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 256mm x 144mm
   1366x768       60.1*+
   1360x768       59.8     60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected primary 1920x1080+1366+0 (normal left inverted right x axis y axis) 527mm x 296mm
   1920x1080      60.0*    50.0     59.9  
   1920x1080i     60.1     50.0     60.0  
   1680x1050      59.9  
   1280x1024      75.0     60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x800       59.9  
   1152x864       75.0  
   1280x720       60.0     50.0     59.9  
   1440x576i      50.1  
   1024x768       75.1     70.1     60.0  
   1440x480i      60.1     60.1  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   720x576        50.0  
   720x480        60.0     59.9  
   640x480        75.0     72.8     66.7     60.0     59.9  
   720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

答案1

您所描述的行為(在目前螢幕上開啟視窗)應該是預設行為,在我的 14.04 上就是這樣。

由於與某些圖形驅動程式/GPU 組合存在輕微不相容性,在某些情況下可能會出現「特殊情況」。如果沒有可用的“乾淨”選項(修復),您可以使用下面的解決方法。
它存在一個後台腳本,尋找新的視窗出現。如果存在新窗口,腳本會將窗口位置與當前滑鼠位置進行比較。如果滑鼠和新視窗不在同一畫面上,則使用xdotoolwindowmove 指令移動視窗。

背景腳本是個壞主意嗎?

如果您不需要後台腳本,請​​不要使用它。
同時:如果它添加了重要的功能和/或節省了您的時間,那麼不這樣做就太愚蠢了,如果劇本組織得很好,因此“燃料不足”。

作為參考:在我的筆記型電腦和桌上型電腦上,我不斷運行至少5 個後台腳本 + 偶爾一些用於測試目的的附加腳本,無需任何注意。

採取什麼措施可以節省燃油:

  1. 該腳本有一個可變的循環週期
    該腳本每 10 秒檢查一次是否已連接第二個螢幕。如果不是,腳本會跳過整個視窗檢查過程並在 10 秒後重新檢查。這意味著腳本僅有的如果連接了第二個螢幕則起作用。連接第二個螢幕後,在 10 秒內,循環週期將變更為 2 秒。
  2. 腳本執行的所有(接下來)操作都是有條件的
    例如滑鼠位置是僅有的檢查過如果有新的窗戶等。

總之,在我的系統上我無法注意到或測量任何由於腳本而產生的額外負載。

劇本

#!/usr/bin/env python3
import subprocess
import time

def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

def screen_limit():
    screendata = [s for s in get("xrandr").split() if s.count("+") == 2]
    if len(screendata) == 2:
        return int([s.split("x")[0] for s in screendata if "+0+0" in s][0])

wd1 = get(["wmctrl", "-lG"])

t = 0
while True:
    time.sleep(2)
    # once per 10 seconds, check for a second screen
    if t == 0: 
        while True:
            rightside = screen_limit()
            # if no second screen, skip the procedure
            if rightside == None:
                time.sleep(10)
            else:
                break
    wd2 = get(["wmctrl", "-lG"])
    # check for buggy wmctrl
    if all([wd2 != None, wd1 != None]):
        wins = [w.split() for w in wd2.splitlines()]
        # check for new windows
        relevant = [w for w in wins if not w[0] in wd1]
        if relevant:
            # if new windows appeared, see if they match the mouse pos
            mousepos = int(get([
                "xdotool", "getmouselocation"
                ]).split()[0].split(":")[1])
            for w in relevant:
                check = [mousepos < rightside, int(w[2]) < rightside]
                if check[0] != check[1]:
                    # if mouse and window are not on the same screen > move
                    if check[0] == False:
                        cmd = ["xdotool", "windowmove", w[0],
                            str(int(w[2]) + rightside), w[3]]                    
                    else:
                        cmd = ["xdotool", "windowmove", w[0],
                            str(int(w[2]) - rightside), w[3]]
                    subprocess.Popen(cmd)
    wd1 = wd2
    t = 0 if t == 10 else t
    t += 1

如何使用

  1. 該腳本需要wmctrlxdotool。在終端機中運作:

    sudo apt-get install xdotool wmctrl
    
  2. 將腳本複製到一個空文件中,另存為move_windows.py
  3. 測試-透過命令運行腳本:

    python3 /path/to/move_windows.py
    
  4. 如果一切按預期工作,請將其新增至啟動應用程式:Dash > 啟動應用程式 > 新增。新增指令:

    /bin/bash -c "sleep 15 && python3 /path/to/move_windows.py"
    

相關內容