У меня есть Единица выполнения установки парного монитора на Ubuntu 14.04
Каждый раз, когда я загружаю машину, система, кажется, забывает положения моих значков на рабочем столе на дисплее правой стороны (Соединенный через VGA). Значки все изложены приятно на правой стороне экрана, но когда я загружаюсь, все значки сгруппированы близко к верхней левой нижней части средство запуска с некоторым наложением друг друга как так:
Как я могу зафиксировать это так, значки на рабочем столе появляются в том же месте каждый раз, когда я загружаюсь? Значки на дисплее левой стороны (соединенный с помощью HDMI) всегда прекрасны и всегда остаются в их тех же положениях.
Скорее всего, проблемой является результат ошибки (связанный с видеодрайвером). Я предполагаю, что второй экран не помнят так или иначе, и "фактически" пере - соединенный в довольно поздней стадии в запуске (входят в систему) процесс.
Как часто, даже если это - ошибка, это не означает, что мы не можем найти работу вокруг. Если мы:
эффективно ошибка работается вокруг.
Можно получить позицию по рабочему столу значка командой:
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()
restore_icons.py
В главном разделе сценария, набор соответствующее (локализованное) название Desktop
папка:
# --- set your localized desktop name below:
dt_name = "Desktop"
# ---
Тестовый прогон сценарий путем выполнения команды:
python3 /path/to/restore_icons.py snapshot
Снимок текущего макета будет взятием. De закрываются, меню появляется на Вашем рабочем столе, но отмените его путем нажатия вне меню на рабочий стол.
Затем сознательно бездельничайте со своими значками (позиции) по Вашему рабочему столу.
Finaly, запущенный скрипт снова с другим аргументом:
python3 /path/to/restore_icons.py restore
Ожидайте в течение 20 секунд (см. Примечание внизу, почему это включено в сценарий), и Ваши значки на рабочем столе будут восстановлены тому, как это было перед взятием снимка.
Если все хорошо работает, добавьте shortut ключ: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:
python3 /path/to/restore_icons.py snapshot
Это будет ярлыком, который необходимо использовать, для закрытия компьютера.
Добавьте команду восстановления для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:
python3 /path/to/restore_icons.py restore
Теперь спустя 20 секунд после запуска (входят в систему), Ваши значки будут точно похожи на Вас, оставил их на закрытии.
Повреждение этих 20 секунд должно удостовериться, что второй монитор найден и повторно подключен перед выполнениями команды восстановления.
Я написал iconic
, чтобы решить эту проблему, позволив вам сохранить и загрузить настройки значков на рабочем столе. Кроме того, он будет:
Вы можете получить скрипт на github .
Вот основной экран:
Посетите страницу github для иконических чтобы увидеть все другие экраны, объяснения и копию сценария.
Сценарий работает над Linux Mint 18.3 Корицы также, когда я сделал следующие небольшие изменения:
замена:
позиция значка наутилуса-> выход сессии гнома позиции значка Немо-> коричный выход сессии "killall", "наутилус"-> "killall", "настольный Немо" подпроцесс. Popen (["наутилус"])-> подпроцесс. POpen (["рабочий стол Немо"])
большое спасибо за тот большой сценарий
корица