Как я могу сохранить позиции значка рабочего стола после перезагрузки на установке парного монитора (Единица)?

У меня есть Единица выполнения установки парного монитора на Ubuntu 14.04

Каждый раз, когда я загружаю машину, система, кажется, забывает положения моих значков на рабочем столе на дисплее правой стороны (Соединенный через VGA). Значки все изложены приятно на правой стороне экрана, но когда я загружаюсь, все значки сгруппированы близко к верхней левой нижней части средство запуска с некоторым наложением друг друга как так:

enter image description here

Как я могу зафиксировать это так, значки на рабочем столе появляются в том же месте каждый раз, когда я загружаюсь? Значки на дисплее левой стороны (соединенный с помощью HDMI) всегда прекрасны и всегда остаются в их тех же положениях.

3
задан 20 June 2019 в 03:45

3 ответа

Причина

Скорее всего, проблемой является результат ошибки (связанный с видеодрайвером). Я предполагаю, что второй экран не помнят так или иначе, и "фактически" пере - соединенный в довольно поздней стадии в запуске (входят в систему) процесс.

Работа вокруг

Как часто, даже если это - ошибка, это не означает, что мы не можем найти работу вокруг. Если мы:

  • может сделать некоторый снимок текущих позиций значка на, выходят из системы
  • восстановите позиции значка после того, как второй экран появляется правильно после перезапуска (входят в систему)

эффективно ошибка работается вокруг.

Как считать позицию значка на рабочем столе

Можно получить позицию по рабочему столу значка командой:

gvfs-info -a 'metadata::nautilus-icon-position' '<file>'

Этот будет a.o. производить координаты значка на Вашем рабочем столе, который мы можем сохранить в файл. Если мы делаем снимок этим способом Вашего рабочего стола прежде, чем закрыть компьютер, мы можем впоследствии восстановить положение значка впоследствии с командой:

gvfs-set-attribute -t string '<file>' 'metadata::nautilus-icon-position' '500,500'

(например),

Сценарий, чтобы взять такой снимок и восстановить расположение значка (в зависимости от аргумента) был бы:

#!/usr/bin/env python3
import subprocess
import os
import sys

# --- set your localized desktop name below:
dt_name = "Bureaublad"
# ---


# used strings & definitions
val = " 'metadata::nautilus-icon-position' "
search = "gvfs-info -a"+val
set_val = "gvfs-set-attribute -t string "
home = os.environ["HOME"]
dt_dir = home+"/"+dt_name
datafile = home+"/.desktop_items.txt"

arg = sys.argv[1]

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")

def snapshot():
    try:
        os.remove(datafile)
    except FileNotFoundError:
        pass
    dt_items = os.listdir(dt_dir)
    dt_data = []
    for f in [f for f in dt_items if all([not f.startswith("."), not f.endswith("~")])]:
        f = '"'+f+'"' if f.count(" ") > 0 else f
        file = dt_dir+"/"+f
        cmd = search+file
        try:
            loc = [int(n) for n in get(cmd).split()[-1].split(",")]
            # loc[0] = loc[0] - screen_pos[0]; loc[1] = loc[1] - screen_pos[1]
            loc = (",").join([str(n) for n in loc])
            open(datafile, "a+").write(file+"|||"+loc+"\n")
        except:
            pass
    subprocess.Popen(["/bin/bash", "-c", "notify-send 'A snapshot was taken'"])

def restore():
    items = [l.strip().split("|||") for l in open(datafile).readlines()]
    for item in items:
        try:
            xy = [int(n) for n in item[1].split(",")]
            move_to = (",").join(str(n) for n in [xy[0], xy[1]])
            command = set_val+item[0]+val+move_to
            subprocess.Popen(["/bin/bash", "-c", command])
        except:
            pass
    subprocess.Popen(["/bin/bash", "-c", "notify-send 'Click on the desktop and press F5'"])

if arg == "snapshot":
    snapshot()
elif arg == "restore":
    restore()

Использовать его:

  • Скопируйте сценарий в пустой файл, сохраните его как restore_desktop.py
  • В главном разделе сценария, в строке:

    # --- set your localized desktop name below:
    dt_name = "Desktop"
    # ---
    

    определите локализованное имя своей настольной папки ("Bureaublad" на нидерландском языке)

  • Для взятия снимка текущего расположения значка выполните команду:

    python3 /path/to/restore_desktop.py snapshot
    
  • Восстановить ранее взятый снимок:

    python3 /path/to/restore_desktop.py restore
    

    затем нажмите на рабочий стол и нажмите F5 для обновления рабочего стола.

Использовать сценарий в нашей ситуации однако взяло бы несколько дополнений

  • Рабочий стол все еще должен быть обновлен из командной строки для фактического применения восстановления значков. Это может быть сделано любым перезапуском nautilus, или нажмите F5 с рабочим столом впереди. Так как мы используем его на запуске, первая опция могла бы быть самой изящной.

  • Мы должны взять на себя снимок, выходят из системы как текущий пользователь, чтобы удостовериться, что последнее расположение значка зарегистрировано в снимок. До сих пор я не мог найти способ сделать это. Однако как всегда, существует обходное решение. Если мы включаем команду

    gnome-session-quit --poweroff
    

    в нашем сценарии мы можем просто назвать сценарий (с правильными аргументами), чтобы включать процедуру завершения работы и взять снимок.

  • Затем для проверки восстановленный снимок применяется, мы можем включать перезапуск наутилуса в сценарии.

Решение

Заключительный сценарий затем становится:

#!/usr/bin/env python3
import subprocess
import os
import sys
import time

# --- set your localized desktop name below:
dt_name = "Desktop"
# ---


# used strings & definitions
val = " 'metadata::nautilus-icon-position' "
search = "gvfs-info -a"+val
set_val = "gvfs-set-attribute -t string "
home = os.environ["HOME"]
dt_dir = home+"/"+dt_name
datafile = home+"/.desktop_items.txt"

arg = sys.argv[1]

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")

def snapshot():
    # remove the previous snapshot
    try:
        os.remove(datafile)
    except FileNotFoundError:
        pass
    # list the items on the desktop, look up their positions
    dt_items = os.listdir(dt_dir)
    dt_data = []
    for f in [f for f in dt_items if all([not f.startswith("."), not f.endswith("~")])]:
        f = '"'+f+'"' if f.count(" ") > 0 else f
        file = dt_dir+"/"+f
        cmd = search+file
        try:
            loc = [int(n) for n in get(cmd).split()[-1].split(",")]
            loc = (",").join([str(n) for n in loc])
            open(datafile, "a+").write(file+"|||"+loc+"\n")
        except:
            pass
    # notify that a snapshot was taken
    subprocess.call(["/bin/bash", "-c", "notify-send 'A snapshot was taken'"])
    # send the command to shutdown
    subprocess.Popen(["gnome-session-quit", "--power-off"])

def restore():
    # wait for 20 seconds for the desktop to be fully loaded and the screen to be found
    time.sleep(20)
    # read the snapshot file
    items = [l.strip().split("|||") for l in open(datafile).readlines()]
    for item in items:
        try:
            # place the icon(s) acoording to the remembered position(s)
            xy = [int(n) for n in item[1].split(",")]
            move_to = (",").join(str(n) for n in [xy[0], xy[1]])
            command = set_val+item[0]+val+move_to
            subprocess.Popen(["/bin/bash", "-c", command])
        except:
            pass
    # restart nautilus
    subprocess.call(["killall", "nautilus"])
    subprocess.Popen(["nautilus"])
    # send notification
    subprocess.Popen(["/bin/bash", "-c", "notify-send 'Icon positions were restored'"])

if arg == "snapshot":
    snapshot()
elif arg == "restore":
    restore()

Как использовать

  1. Скопируйте сценарий в пустой файл, сохраните его как restore_icons.py
  2. В главном разделе сценария, набор соответствующее (локализованное) название Desktop папка:

    # --- set your localized desktop name below:
    dt_name = "Desktop"
    # ---
    
  3. Тестовый прогон сценарий путем выполнения команды:

    python3 /path/to/restore_icons.py snapshot
    

    Снимок текущего макета будет взятием. De закрываются, меню появляется на Вашем рабочем столе, но отмените его путем нажатия вне меню на рабочий стол.

    <image_1>

    Затем сознательно бездельничайте со своими значками (позиции) по Вашему рабочему столу.
    Finaly, запущенный скрипт снова с другим аргументом:

     python3 /path/to/restore_icons.py restore
    

    Ожидайте в течение 20 секунд (см. Примечание внизу, почему это включено в сценарий), и Ваши значки на рабочем столе будут восстановлены тому, как это было перед взятием снимка.

  4. Если все хорошо работает, добавьте shortut ключ: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:

    python3 /path/to/restore_icons.py snapshot
    

    Это будет ярлыком, который необходимо использовать, для закрытия компьютера.

  5. Добавьте команду восстановления для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:

    python3 /path/to/restore_icons.py restore
    

    Теперь спустя 20 секунд после запуска (входят в систему), Ваши значки будут точно похожи на Вас, оставил их на закрытии.

Примечание:

Повреждение этих 20 секунд должно удостовериться, что второй монитор найден и повторно подключен перед выполнениями команды восстановления.

5
ответ дан 1 December 2019 в 15:24

Я написал iconic, чтобы решить эту проблему, позволив вам сохранить и загрузить настройки значков на рабочем столе. Кроме того, он будет:

  • Позволяет перемещать значки на любой из трех мониторов
  • Определить размер сетки для равномерного распределения значков по всему рабочему столу так близко или далеко друг от друга, как вы предпочитаете
  • Не страдает «синдром потерянных значков», возникающий при использовании мониторов с несколькими разрешениями.
  • Сортировка значков в алфавитном порядке, в алфавитном порядке с префиксом «Ссылка на» игнорируется, сортировка по дате изменения по возрастанию или дате по убыванию
  • Разрешить различный размер сетки (столбцы х строк) в зависимости от монитора, например больше на мониторе 4K, чем на мониторе 2K
  • Мгновенная кнопка тестирования для быстрого эксперимента по изменениям строк столбца х или зарезервированного пространства изменения для левой, верхней, правой или нижней областей монитора
  • Кнопка Test будет действовать в течение заданных вами x секунд, очистите все окна перед тестом и восстановите их после теста
  • Скрипт Bash для простых модификаций

Вы можете получить скрипт на github .

Вот основной экран:

iconic main menu.png

Посетите страницу github для иконических чтобы увидеть все другие экраны, объяснения и копию сценария.

0
ответ дан 1 December 2019 в 15:24

Сценарий работает над Linux Mint 18.3 Корицы также, когда я сделал следующие небольшие изменения:

замена:

позиция значка наутилуса-> выход сессии гнома позиции значка Немо-> коричный выход сессии "killall", "наутилус"-> "killall", "настольный Немо" подпроцесс. Popen (["наутилус"])-> подпроцесс. POpen (["рабочий стол Немо"])

большое спасибо за тот большой сценарий

корица

1
ответ дан 1 December 2019 в 15:24

Другие вопросы по тегам:

Похожие вопросы: