我在 Ubuntu 18.04 中遇到了一个奇怪的问题。我在 Office 中有一个扩展显示器,我使用 libreoffice 打开了一个 csv 文件并在扩展显示器中查看了它,然后关闭了该显示器。
现在我在家,只有笔记本电脑的显示器可用,当我尝试打开同一个文件(或任何其他 csv 文件)时,文件已打开,但我在屏幕上看不到它。我知道文件已打开,因为在屏幕左侧的垂直栏中,我可以看到 librecalc 图标上有一个红点,当我右键单击该图标并按“所有窗口”时,我可以看到已打开的文件的图标及其 3 行数据。此外,当我执行“ps -ef | grep libre”时,我可以看到该进程仍在运行。
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 excel 或 WPS 工具正常打开。
我不知道这个问题是否在所有应用程序中都会发生,但我也注意到 Skype 有这个问题。
笔记: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
$
答案1
答案2
我等了一个月,没人回复。然后我在 launchpad 上发布了这个,下面是那里发布的答案(引述如下)。它对我有用。
我建议阅读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、然后按箭头键将窗口移动到主屏幕、然后按“enter”来移动不可见的窗口。如果扩展屏幕位于笔记本电脑屏幕的右侧,那么您可能必须使用“左”键。
答案3
当我从挂起状态恢复时,也会发生类似的情况,三个显示器中的一个(通常是上个月更换的旧显示器#3)处于非活动状态。
我可以在仪表盘上看到应用程序正在运行,但是窗口不可见。
- 使用Alt+Tab选择不可见的窗口。
- 按Alt+F7拖动不可见的窗口。
- 鼠标指针从屏幕上消失。
- 移动鼠标(不单击)直到在我想要的窗口位置出现十字鼠标指针。
- Left-Click瞧!窗口又可见了。
您可以在工作桌面上使用可见的 Windows 进行实验。
答案4
按下按键将所有窗口移动到唯一剩余的屏幕
您所描述的是特定硬件上发生的错误。断开第二个屏幕后,它仍然在输出中显示为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
(进入设置->设备->键盘->自定义快捷键,点击
+
)
就这样