Я сталкиваюсь со специфической проблемой в Ubuntu 18.04. У меня есть расширенный дисплей в офисе, и я открыл файл CSV с libreoffice и просмотрел его в расширенном дисплее и затем закрыл его тот дисплей.
Теперь я дома и имею в наличии только дисплей портативного компьютера, и когда я пытаюсь открыть тот же файл (или любой другой файл CSV), файл открыт, но я не вижу его на экране. Я знаю, что файл открыт, потому что в вертикальной панели на левой стороне экрана, я вижу librecalc значок с одной красной точкой на нем, и когда я щелкаю правой кнопкой по тому значку и нажимаю "All Windows" затем, я вижу значок файла, который открыт с его 3 строками данных. Также, когда я делаю "PS-ef | grep Весы", я вижу процесс, все еще работающий.
home/xxx$ ps -ef | grep libre
xxx 7948 1227 0 20:57 ? 00:00:00 /usr/lib/libreoffice/program/oosplash --calc file:///home/xxx/Desktop/desktop_files/try/x1.csv
xxx 7966 7948 1 20:57 ? 00:00:04 /usr/lib/libreoffice/program/soffice.bin --calc file:///home/xxx/Desktop/desktop_files/try/x1.csv --splash-pipe=5
На следующий день, когда в офисе и расширенном дисплее, снова доступном, я мог теперь открыть тот же файл CSV - приложение, открытое в расширенном дисплее. Но на этот раз я перетащил приложение к дисплею портативного компьютера и закрыл приложение там. После этого, когда я открыл файл CSV снова, на этот раз файл, открытый правильно в дисплее портативного компьютера.
Так, как я сбрасываю приложение, так, чтобы оно теперь открылось только в дисплее, который доступен?Примечание: Файл CSV является очень маленьким, примерно 300 байтов и 3 строки данных, и это открывается прекрасный MS инструменты WPS или Excel.
Я не знаю, происходит ли эта проблема со всеми приложениями, но я также заметил его со скайпом.
Примечание: Jacob попросил, чтобы я предоставил информацию о xrandr, и это дано ниже. В этом сценарии я закрыл libreoffice в расширенном окне, затем разъединил то окно, и попробованный для открытия libreoffice в окне ноутбука. Как обычно, значок приложения говорит, что это открыто, но окно не видимо.
$ xrandr
Screen 0: minimum 320 x 200, current 2390 x 768, maximum 8192 x 8192
LVDS-1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 309mm x 174mm
1366x768 59.97*+ 39.97
1360x768 59.80 59.96
1280x720 60.00 59.99 59.86 59.74
1024x768 60.04 60.00
960x720 60.00
928x696 60.05
896x672 60.01
1024x576 59.95 59.96 59.90 59.82
960x600 59.93 60.00
960x540 59.96 59.99 59.63 59.82
800x600 60.00 60.32 56.25
840x525 60.01 59.88
864x486 59.92 59.57
800x512 60.17
700x525 59.98
800x450 59.95 59.82
640x512 60.02
720x450 59.89
700x450 59.96 59.88
640x480 60.00 59.94
720x405 59.51 58.99
684x384 59.88 59.85
680x384 59.80 59.96
640x400 59.88 59.98
576x432 60.06
640x360 59.86 59.83 59.84 59.32
512x384 60.00
512x288 60.00 59.92
480x270 59.63 59.82
400x300 60.32 56.34
432x243 59.92 59.57
320x240 60.05
360x202 59.51 59.13
320x180 59.84 59.32
VGA-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
VGA-1-2 connected 1024x768+1366+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x768 60.00*
800x600 60.32 56.25
848x480 60.00
640x480 59.94
1024x768 (0x43) 65.000MHz -HSync -VSync
h: width 1024 start 1048 end 1184 total 1344 skew 0 clock 48.36KHz
v: height 768 start 771 end 777 total 806 clock 60.00Hz
800x600 (0x44) 40.000MHz +HSync +VSync
h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88KHz
v: height 600 start 601 end 605 total 628 clock 60.32Hz
800x600 (0x45) 36.000MHz +HSync +VSync
h: width 800 start 824 end 896 total 1024 skew 0 clock 35.16KHz
v: height 600 start 601 end 603 total 625 clock 56.25Hz
640x480 (0x47) 25.175MHz -HSync -VSync
h: width 640 start 656 end 752 total 800 skew 0 clock 31.47KHz
v: height 480 start 490 end 492 total 525 clock 59.94Hz
$
То, что Вы описываете, является ошибкой, которая происходит на определенных аппаратных средствах. После разъединения второго экрана это все еще показывает в выводе xrandr
как "фантомный" монитор. Необходимо сообщить об этом.
Как работать вокруг?
Хотя это - соответствующие меры на коротком сроке, это не будет большая часть справки, так как этот вид ошибок обычно живет дольше, чем один или два релиза Ubuntu.
Вы нашли обходное решение, но это кажется настоящей стычкой. С другой стороны, можно установить сценарий ниже под сочетанием клавиш. Это переместит все "нормальные" окна в оставшийся монитор, расположенный как в изображении ниже, таким образом готовый выбрать окно, с которым Вы хотите работать:
Сценарий
#!/usr/bin/env python3
import gi
gi.require_version("Wnck", "3.0")
from gi.repository import Wnck
import subprocess
scr = Wnck.Screen.get_default()
scr.force_update()
wins = [
w for w in scr.get_windows() if
w.get_window_type() == Wnck.WindowType.NORMAL
]
def get(cmd):
try:
return subprocess.check_output(cmd).decode("utf-8".strip())
except subprocess.CalledProcessError:
pass
def get_yshift(window):
"""
windows with property NET_FRAME_EXTENTS are not positioned correctly.
we can fix that by looking up the top- extent value, add it to the
targeted y- position.
"""
wid = window.get_xid()
xprop_data = get(["xprop", "-id", str(wid)])
try:
check = [
l.split("=")[1].strip().split(", ")
for l in xprop_data.splitlines()
if "_NET_FRAME_EXTENTS(CARDINAL)" in l
][0]
y_shift = - int(check[2])
except IndexError:
y_shift = 0
return y_shift
x = 120
y = 70
for w in wins:
print(w.get_name(), x, y)
w.unmaximize()
g = Wnck.WindowGravity.NORTHWEST
flags = Wnck.WindowMoveResizeMask.X | \
Wnck.WindowMoveResizeMask.Y | \
Wnck.WindowMoveResizeMask.WIDTH | \
Wnck.WindowMoveResizeMask.HEIGHT
w.set_geometry(g, flags, x, y + get_yshift(w), 200, 300)
x = x + 90
y = y + 50
collect_windows.py
Создайте ярлык, выполнив команду:
python3 /path/to/collect_windows.py
(Перейдите к Настройкам-> Устройства-> Клавиатура-> Пользовательские Ярлыки, нажмите +
)
Это все
Фоновый процесс , чтобы установить, на каком мониторе должны появляться новые окна.
Вы можете запустить этот скрипт при наличии одного монитора и остановить его, когда их несколько. Он был написан для разных целей, но подходит для вашей ситуации. С уважением и одобрением к сценарию @JacobVlijm .
Добавьте некоторую задержку перед выполнением, если вы поместите этот скрипт в автозагрузку приложений. Передать имя монитора в качестве аргумента ./script LVDS-1
Я ждал месяц, и никто не ответил. Тогда я разместил это на панели запуска, и вот ответ, опубликованный там (цитируется ниже). Это сработало для меня.
Я рекомендую прочитать https://help.ubuntu.com/stable/ubuntu-help/shell-windows.html.en#working-with-windows
Согласно https://help.ubuntu.com/stable/ubuntu-help/shell-windows-states.html.en вы сможете переместить невидимое окно, выбрав его на панели задач, нажав alt + F7, затем нажмите клавиши со стрелками, чтобы переместить окно на главный экран, а затем нажмите «Ввод». Если расширенный экран находится справа от экрана вашего ноутбука, вам, вероятно, придется использовать «левую» клавишу.
Нечто подобное происходит, когда я возобновляю работу из режима ожидания, и один из трех мониторов (обычно старый монитор № 3 заменяли в прошлом месяце) неактивен.
Я вижу в тире, что приложение работает, но окно не видно.
Вы можете попробовать это с видимой Windows на рабочем столе для экспериментов.