ไฟล์ไม่ปรากฏบนเดสก์ท็อปหากหน้าจอหนึ่งหน้าจอวางแนวตั้งหรือไม่


1

ฉันมี 2 หน้าจอโดยที่หนึ่งอยู่ในแนวนอนปกติและอีกอันหนึ่งเป็นแนวตั้ง

หลังจากฉันเปลี่ยนไฟล์ที่ฉันดาวน์โหลดไปยังเดสก์ท็อปจะมองไม่เห็นอีกต่อไป ฉันเห็นพวกมันใน Nautilus-> เดสก์ท็อป แต่ไม่ใช่ด้วยตาเปล่า ฉันเดาว่าอูบุนตูจะวางไฟล์เหล่านั้นในพื้นที่เสมือนด้านล่างจอมอนิเตอร์ของ BenQ และจากซ้ายไปเป็นแนวตั้ง

ความคิดใด ๆ วิธีการแก้ปัญหานี้?

หมายเหตุ: ไฟล์บนเดสก์ท็อปของฉันถูกจัดเรียงด้วยตนเองและ Keep Aligned จะถูกทำเครื่องหมายออก!

นี่ไม่ใช่สิ่งที่ซ้ำกันของวิธีกำหนดค่า GNOME 3 เพื่อแสดงไอคอนบนเดสก์ท็อปเนื่องจากไม่เกี่ยวข้องกับไอคอนเดสก์ท็อปเช่นถังขยะ, เครือข่ายของฉัน ฯลฯ ไฟล์จริงจะไม่ปรากฏบนหน้าจอ BENQ ฉันติดตั้งแอพนี้ด้วย แต่ไม่ช่วยหรือไม่มีคุณสมบัติที่กล่าวถึงในโพสต์นั้น ฉันเดาว่าโพสต์นั้นเก่าเกินไปและแอพก็เปลี่ยนไปแล้ว


ฉันไม่เห็นไฟล์ใด ๆ บนเดสก์ท็อปของฉันอย่างใดอย่างหนึ่งฉันต้องการค้นหาอุปกรณ์
ทิม

มีความเป็นไปได้ที่ซ้ำกันของวิธีกำหนดค่า GNOME 3 เพื่อแสดงไอคอนบนเดสก์ท็อป
Tim

1
เป็นไปได้มากที่สุดข้อผิดพลาด แต่นั่นไม่ได้หมายความว่าเราไม่สามารถแก้ไขได้ :) เพื่อยืนยันการสันนิษฐานของคุณโปรดเปิดโฟลเดอร์เดสก์ท็อปของคุณเปิดหน้าต่างเทอร์มินัลและเรียกใช้: gvfs-info+ ช่องว่างจากนั้นลากรายการ "ซ่อน" หนึ่งรายการเหนือหน้าต่างเทอร์มินัล จากนั้นค้นหาพิกัดในบรรทัด: metadata::nautilus-icon-position: โปรดโพสต์กลับพิกัด
Jacob Vlijm

1
จากนั้นสมมติฐานถูกต้องนั่นคือด้านล่างหน้าจอด้านซ้าย (1080) แต่ทางด้านซ้ายของหน้าจอด้านขวาในส่วน "คนตาบอด" ฉันจะดูมันจะกลับมา
Jacob Vlijm

1
อย่าคิดว่าฉันจะลืมคุณ แต่มันจะเป็นวันพรุ่งนี้ :)
Jacob Vlijm

คำตอบ:


2

เกิดอะไรขึ้น

สมมติฐานของคุณว่าไฟล์ที่ดาวน์โหลด "ที่ดิน" ในพื้นที่ "คนตาบอด" ถูกต้อง: คุณสามารถรับตำแหน่งไอคอนด้วยคำสั่ง:

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

หมายเหตุ

  • แม้ว่าฉันจะทำการทดสอบเป็นเวลานานในระบบของฉัน แต่ข้อผิดพลาดไม่ปรากฏในระบบของฉันดังนั้นคุณสามารถทำการทดสอบ "ของจริง" ได้เท่านั้น :)
  • หากเดสก์ท็อปมีจำนวนมากหากมีรายการอยู่จริงการดำเนินการรีเฟรชอาจจัดเรียงไอคอนในพื้นที่ "ต้องห้าม" ฉันไม่สามารถทดสอบได้ แต่ถ้าเป็นเช่นนั้นในสถานการณ์ของคุณด้วยเหตุผลเดียวกับข้างต้น
  • สคริปต์เหมือนเดิมถือว่าหน้าจอมีการจัดตำแหน่งสูงสุดดังนั้นพื้นที่ "blind" จะอยู่ที่มุมล่างซ้ายเท่านั้น

ว้าวมีรายละเอียดอย่างแน่นอน! ฉันจะทดสอบสิ่งนี้ในช่วงสุดสัปดาห์และแจ้งให้คุณทราบ
ubuntico
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.