Infelizmente, não há como fazer as configurações do monitor entenderem que você tem a tela externa à esquerda e que a tela da direita é a tela "principal" e a localização "principal" para seus ícones da área de trabalho.
Isso não significa, no entanto, que você esteja condenado a arrastar e reorganizar seus ícones sempre que sua segunda tela for conectada ou desconectada.
Como poupar tempo para reorganizar manualmente os itens da área de trabalho
Com o script abaixo (sob uma tecla de atalho), você pode tirar um "instantâneo" da maneira como seus ícones são organizados em sua área de trabalho (você só precisa fazer isso uma vez).
Com uma segunda tecla de atalho, esse instantâneo será "convertido" para a nova situação quando uma segunda tela for anexada e vice-versa; seus ícones estarão sempre na tela principal, organizados de acordo com o instantâneo.
A vantagem é que a solução funcionará independentemente da configuração da sua tela, e não importa como as telas estejam alinhadas. Você pode até mudar isso, o script irá calcular a configuração e as posições dos seus ícones.
Como funciona na prática
- Pressione uma combinação de teclas
(1)
para obter um instantâneo da disposição atual dos ícones da área de trabalho (conforme mencionado, você só precisa fazer isso uma vez). Este arranjo será lembrado em um arquivo oculto
- Agora, anexe sua segunda tela, faça qualquer configuração desejada (esquerda / direita, superior ou não, tudo é possível). Seu desktop ficará bagunçado.
- Pressione outra combinação de teclas
(2)
para "traduzir" o layout da sua área de trabalho para a nova configuração. Seus ícones serão movidos para a tela incorporada à direita, como se nenhuma segunda tela estivesse conectada. Clique na área de trabalho e, em seguida, pressione F5 para atualizar a área de trabalho (caso contrário, você não verá as alterações).
Se você desconectar a segunda tela, sua área de trabalho ficará desarrumada novamente. Basta pressionar a combinação de teclas (2)
, clicar na área de trabalho e pressionar F5 novamente para restaurar o layout novamente.
Como configurar
- Copie o script abaixo em um arquivo vazio, salve-o como
arrange_desktop.py
- Na seção head do script, defina o nome da sua tela "principal" (use o comando
xrandr
para descobrir). Esta será provavelmente a sua tela embutida. Eu já o configurei para a saída de xrandr
em sua pergunta.
- Organize seus ícones da área de trabalho conforme desejar
-
Teste o script:
-
Execute-o a partir de um terminal pelo comando:
python3 /path/to/arrange_desktop.py snapshot
-
Você verá uma notificação:
-
Agora conecte a segunda tela, configure-a como quiser, seus ícones ficarão confusos.
-
Agora, execute o script novamente, com a opção restore
:
python3 /path/to/arrange_desktop.py restore
-
Você verá uma notificação:
-
Clique na área de trabalho (em qualquer lugar) e pressione F5 , seus ícones serão organizados de acordo com o instantâneo na tela main (o correto no seu caso) ), não importa qual seja a configuração atual da tela.
-
Se tudo funcionar bem, crie duas teclas de atalho para os comandos:
python3 /path/to/arrange_desktop.py snapshot
e
python3 /path/to/arrange_desktop.py restore
e você estará pronto. Agora você pode corrigir o layout da sua área de trabalho nos dois sentidos (conectar-desconectar) com uma simples combinação de teclas.
Notas
- Não é preciso dizer que, se você alterar o arranjo da área de trabalho e quiser que ele seja lembrado, tire um instantâneo novamente.
- Você pode tirar um instantâneo enquanto a segunda tela é anexada ou não, o script calcula as posições do ícone corretamente para a tela "principal".
O script
#!/usr/bin/env python3
import subprocess
import time
import os
import sys
#--- set the localized name of your desktop below (if necessary)
dt_name = "Desktop"
#--- set the name of the "main" screen below (replace "DVI-I-1")
screen = "LVDS1"
#---
arg = sys.argv[1]
# used strings & definitions
val = " 'metadata::nautilus-icon-position' "
search = "gvfs-info -a"+val
set_val = "gvfs-set-attribute -t string "
home = os.environ["HOME"]
dt_dir = os.environ["HOME"]+"/"+dt_name
datafile = home+"/.desktop_items.txt"
# functions
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def scr_data():
scr = [l.split() for l in get("xrandr").splitlines() if screen in l][0]
return [int(n) for n in [s for s in scr if all(["+" in s, "x" in s])][0].split("+")[-2:]]
# take a snapshot of the icon layout
if arg == "snapshot":
screen_pos = scr_data()
try:
os.remove(datafile)
except FileNotFoundError:
pass
dt_items = os.listdir(dt_dir)
dt_data = []
for f in [f for f in dt_items if all([not f.startswith("."), not f.endswith("~")])]:
f = '"'+f+'"' if f.count(" ") > 0 else f
file = dt_dir+"/"+f
cmd = search+file
try:
loc = [int(n) for n in get(cmd).split()[-1].split(",")]
loc[0] = loc[0] - screen_pos[0]; loc[1] = loc[1] - screen_pos[1]
loc = (",").join([str(n) for n in loc])
open(datafile, "a+").write(file+"|||"+loc+"\n")
except:
pass
subprocess.Popen(["/bin/bash", "-c", "notify-send 'A snapshot was taken'"])
# restore icons
elif arg == "restore":
vector = scr_data()
items = [l.strip().split("|||") for l in open(datafile).readlines()]
for item in items:
try:
xy = [int(n) for n in item[1].split(",")]
move_to = (",").join(str(n) for n in [vector[0]+xy[0], vector[1]+xy[1]])
command = set_val+item[0]+val+move_to
subprocess.Popen(["/bin/bash", "-c", command])
except:
pass
subprocess.Popen(["/bin/bash", "-c", "notify-send 'Click on the desktop and press F5'"])