我有 2 个屏幕,一个是正常水平的,另一个是垂直的。
在我更改了这些之后,我下载到桌面的文件就看不见了。我可以在 Nautilus->Desktop 中看到它们,但肉眼看不到。我猜 Ubuntu 将这些文件放在 BenQ 显示器下方和垂直显示器左侧的虚拟区域中。
有什么想法可以解决这个问题吗?
注意:我的桌面上的文件是手动排序的,并且保持对齐已勾选!
这不是如何配置 GNOME 3 在桌面上显示图标因为这不处理桌面图标,如垃圾、我的网络等。实际文件在 BENQ 屏幕上不可见。我也安装了这个应用程序,但它既没有帮助,也没有该帖子中提到的功能。我猜这个帖子太旧了,应用程序从那时起就发生了变化。
答案1
会发生什么
您假设下载的文件“落”在“盲”区域中是正确的:您可以使用以下命令获取图标的位置:
gvfs-info <item>
这将输出坐标64,1382
(x/y),明确图标的位置以下左侧屏幕 ( 1382
> 1080
)。
这很可能是由于错误造成的。
下面的脚本可以用来移动新建将虚拟(跨)桌面上的文件从一个区域(例如,不可见部分)移动到另一个位置(在本例中为可见部分)。
脚本的属性
尽管该脚本看起来有点冗长,但其编写方式可以避免不必要的操作和例程。如果桌面上没有出现新项目,它只会检查新文件,因此几乎不会对处理器造成任何负载。
它能做什么
- 该脚本每秒检查一次桌面文件夹中的新项目
- 如果发现新项目,它会检查位置,并在必要时将其移至可见区域
然而,移动项目后需要刷新桌面,这只有当桌面是最前面的“文件夹”时才能完成。因此脚本设置refresh
为True
。第一次桌面位于最前面时,脚本:
- 刷新桌面。
如何使用
该脚本需要安装 xdotool 和 wmctrl:
sudo apt-get install xdotool
sudo apt-get install wmctrl
xautomation
应该已经存在于你的系统中,但如果没有:
sudo apt-get install xautomation
然后:
- 将以下脚本复制到一个空文件中,并将其保存为 blind_area.py
在脚本的头部,设置左屏幕的尺寸:
left_scr = [1920, 1080]
设置桌面文件夹的本地化名称(可能只是“桌面”,但在荷兰语中则是“Bureaublad”)
- 如果左屏的分辨率和我设置的不同,请设置左屏的分辨率
通过以下命令测试运行脚本:
python3 /path/to/blind_area.py
我通过将屏幕的垂直尺寸设置为其实际尺寸的一半来进行测试,这移动了所有新的(!)图标移动到屏幕的顶部 50%。
- 请注意,一旦您单击桌面(或以任何方式将桌面置于前面),移动操作就会可见。
如果一切正常,请将其添加到您的启动应用程序中:Dash>启动应用程序>添加命令:
/bin/bash -c "sleep 15&&python3 /path/to/blind_area.py"
剧本
#!/usr/bin/env python3
import subprocess
import os
import time
#--- set localized name of the Desktop folder below
desktop_name = "Desktop"
#--- set the resolution of the left screen below
left_scr = [1920, 1080]
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
home = os.environ["HOME"]
dr = home+"/"+desktop_name
# used strings
val = " 'metadata::nautilus-icon-position' "
search = "gvfs-info -a"+val
set_val = "gvfs-set-attribute -t string "
refresh_cmd = "xte 'key F5'"
# function to check if desktop is in front
def check_frontmost():
try:
frontmost = str(hex(int(get("xdotool getwindowfocus").strip())))
frontmost = frontmost[:2]+"0"+frontmost[2:]
w_list = [l.split() for l in get("wmctrl -lG").splitlines()]
except subprocess.CalledProcessError:
return False
else:
check = len([l for l in w_list if all([str(space[0]) in l, frontmost in l, str(space[1]) in l])]) > 0
return check
# function to get the resolution
def get_res():
xr = get("xrandr").split(); pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
dtfiles_1 = []
refresh = False
while True:
# check current files
time.sleep(1)
dtfiles_2 = os.listdir(dr)
# check for new files, move if necessary
newfiles = [f for f in dtfiles_2 if all([
not f in dtfiles_1,
not f.endswith("~"),
not f.startswith("."),
])]
if len(newfiles) != 0:
# check desktop size (only if new files appear)
space = get_res()
for f in newfiles:
fdir = os.path.join(dr, f); fdir = "'"+fdir+"'" if fdir.count(" ") != 0 else fdir
try:
loc = [int(n) for n in eval(get(search+fdir).split()[-1:][0])]
except:
pass
else:
if all([loc[0] < left_scr[0], loc[1] > left_scr[1]]):
command = set_val+fdir+" "+val+str(loc[0])+","+str(loc[1]-left_scr[1])
subprocess.Popen(["/bin/bash", "-c", command])
refresh = True
if all([refresh == True, check_frontmost() == True]):
subprocess.Popen(["/bin/bash", "-c", refresh_cmd])
refresh = False
dtfiles_1 = dtfiles_2
笔记
- 尽管我在我的系统上测试了很长时间,但是这个错误并没有出现在我的系统上,所以“真正的”测试只有你才能做:)
- 如果桌面上挤满了很多如果项目,刷新操作可能会将图标排列到“禁止”区域。但是,我无法测试您的情况是否也是如此,原因与上述相同。
- 该脚本假定屏幕是顶部对齐的,因此“盲区”仅在左下角。