如果一个屏幕垂直定向,桌面上不可见文件?
我有2个屏幕,其中一个是正常水平,另一个是垂直。
我更改了下载到桌面的文件后,不再可见。 我可以在Nautilus-> Desktop中看到它们,但不是裸眼。 我想Ubuntu会将这些文件放在BenQ监视器下方的虚拟区域中,并保留在垂直监视器上。
任何想法如何解决这个问题?
注意:桌面上的文件是手动排序的,并且保持对齐状态!
这不是如何配置GNOME 3以在桌面上显示图标的副本,因为这不涉及垃圾箱,我的网络等桌面图标。实际文件在BENQ屏幕上不可见。 我也安装了这个应用程序,但它既没有帮助也没有该post中提到的function。 我猜post太旧了,应用程序已经改变了。
怎么了
您假设下载的文件“落在”“盲区”区域是正确的:您可以使用以下命令获取图标位置:
gvfs-info
这输出坐标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
-
在脚本的head部分中,设置左侧屏幕的大小:
left_scr = [1920, 1080]
-
设置桌面文件夹的本地化名称(可能只是“桌面”,但在荷兰语中,它可能是“官僚”)
- 如果与我设置的不同,请设置左侧屏幕的分辨率
-
通过命令测试脚本:
python3 /path/to/blind_area.py
-
我通过将屏幕的垂直尺寸设置为实际尺寸的一半来测试它,这将所有新的 (!)图标移动到我屏幕的前50%。
- 请注意,一旦您单击桌面(或以任何方式将桌面置于前面),移动操作将可见。
-
如果一切正常,请将其添加到启动应用程序:Dash> Startup Applications>添加命令:
/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
笔记
- 虽然我在我的系统上测试了很长时间,但这个bug并没有出现在我的系统上,所以“真正的”测试只能由你完成:)
- 如果桌面上的项目非常拥挤,则刷新操作可能会将图标排列到“禁止”区域。 然而,由于与上述相同的原因,我无法测试您的情况是否属于这种情况。
- 事实上,脚本假设屏幕是顶部对齐的,因此“盲区”仅位于左下角。