Итак, оказывается, что KDE и GNOME теперь следуют несколько разным соглашениям об именах и метаданных эскизов. Это очень неудачно, так как такие проблемы должны были быть устранены с помощью работы группы бесплатных стандартов.
Я подал Free Standards Group , который, мы надеемся, получит это решение в конечном счете, но пока что миниатюры, созданные KDE и GNOME, к сожалению несовместимы друг с другом.
Чтобы обойти эту несовместимость, я в конце концов изменил скрипт Python, который Джеймс Хенстридж опубликовал в Q & amp; A, связанном с выше. Основное изменение, которое я внедрил, - это функция, которая обновляет генерируемые эскизы, которые должны быть распознаны KDE (путем переименования их и обновления фрагмента метаданных PNG).
Вот приведенный выше сценарий в текущей редакции:
#!/usr/bin/python3
"""
Thumbnail generator for KDE/GNOME
Largely based on a script by James Henstridge
(https://askubuntu.com/a/201997)
Unfortunately there seems to be some disagreement between GNOME and KDE
towards how to follow the XDG specs for saving thumbnails. This script
is meant as a workaround to that issue, generating thumbnails that follow
both specifications.
Dependencies: python3 gir1.2-gnomedesktop-3.0 python-pillow
pillow can be installed with `pip install pillow`
You will also need to have the corresponding thumbnailers installed (e.g.
evince-thumbnailer). KDE thumbnailers are not supported. All previews are
generated through GNOME's thumbnail factory and then made compatible with KDE.
Further references:
Thumbnail specifications in KDE/GNOME:
- https://bugs.kde.org/show_bug.cgi?id=393015
- https://api.kde.org/frameworks/kio/html/previewjob_8cpp_source.html
- https://lazka.github.io/pgi-docs/GnomeDesktop-3.0/classes/DesktopThumbnailFactory.html
Setting PNG metadata:
- http://pillow.readthedocs.io/en/5.1.x/PIL.html#PIL.PngImagePlugin.PngInfo
- https://stackoverflow.com/a/10552742/1708932
Copyright: (c) 2012 James Henstridge
(c) 2018 Glutanimate
License: MIT license
"""
import os
import sys
from hashlib import md5
from PIL import Image
from PIL import PngImagePlugin
import gi
gi.require_version('GnomeDesktop', '3.0')
from gi.repository import Gio, GnomeDesktop
# FIXME: Hardcoding the Thumbnailer to a generic name
# regardless of MIME type might not always work
KDE_THUMBNAILER = "KDE Thumbnail Generator"
def update_name_and_meta(thumb_path, filename, mtime, mime_type, size):
print("Making thumb compatible with KDE...")
abs_path = os.path.abspath(filename)
# The spaces in our URI are not escaped. This is not in accordance
# with the URI RFC2396 which is listed in the freedesktop specs,
# but it's what KDE currently uses
# (cf.: https://bugs.kde.org/show_bug.cgi?id=393015)
kde_uri = "file://" + abs_path
kde_md5 = md5(kde_uri.encode("utf-8")).hexdigest()
thumb_dir = os.path.dirname(thumb_path)
kde_thumb_path = os.path.join(thumb_dir, kde_md5 + ".png")
if os.path.exists(kde_thumb_path):
print("KDE thumb already exists. Skipping")
return
im = Image.open(thumb_path)
# Set PNG metadata chunk
meta = PngImagePlugin.PngInfo()
meta.add_itxt("Software", KDE_THUMBNAILER)
meta.add_text("Thumb::MTime", str(int(mtime)))
meta.add_text("Thumb::Mimetype", mime_type)
meta.add_text("Thumb::Size", str(size))
meta.add_itxt("Thumb::URI", kde_uri)
im.save(kde_thumb_path, "png", pnginfo=meta)
# uncomment this to remove GNOME thumbnails:
# os.remove(thumb_path)
def make_thumbnail(factory, filename):
mtime = os.path.getmtime(filename)
# Use Gio to determine the URI and mime type
f = Gio.file_new_for_path(filename)
uri = f.get_uri()
info = f.query_info(
'standard::content-type', Gio.FileQueryInfoFlags.NONE, None)
mime_type = info.get_content_type()
size = info.get_size()
if factory.lookup(uri, mtime) is not None:
print("FRESH %s" % uri)
return False
if not factory.can_thumbnail(uri, mime_type, mtime):
print("UNSUPPORTED %s" % uri)
return False
thumbnail = factory.generate_thumbnail(uri, mime_type)
if thumbnail is None:
print("ERROR %s" % uri)
return False
factory.save_thumbnail(thumbnail, uri, mtime)
thumb_path = factory.lookup(uri, mtime)
update_name_and_meta(thumb_path, filename, mtime, mime_type, size)
print("OK %s" % uri)
return True
def thumbnail_folder(factory, folder):
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
make_thumbnail(factory, os.path.join(dirpath, filename))
def main(argv):
factory = GnomeDesktop.DesktopThumbnailFactory()
for filename in argv[1:]:
if os.path.isdir(filename):
thumbnail_folder(factory, filename)
else:
make_thumbnail(factory, filename)
if __name__ == '__main__':
sys.exit(main(sys.argv))
Скопируйте и вставьте вышеприведенный код в новый файл, выберите подходящий имя для него (например, thumbnailer) и пометить его исполняемым.
Чтобы сценарий работал правильно, вам понадобится привязка python для установленной GNOME. Сценарий также зависит от библиотеки pillow Python, которая может быть установлена через pip.
Следующие команды должны заботиться обо всех зависимостях:
sudo apt install gir1.2-gnomedesktop-3.0 python3-pip
pip3 install pillow
Миниатюры сначала генерируются через фабрику миниатюр GNOME, а затем совместим с KDE. Таким образом, вам все равно нужно будет установить все соответствующие миниатюрные модули GNOME. Собственные миниатюры KDE не поддерживаются. Например: для скрипта, поддерживающего создание миниатюр PDF, вам нужно будет установить evince.
(я бы очень хотел использовать привязки python KDE напрямую, но похоже, что оба pykde4 и pykde5 были оставлены для года).
Общее использование - это то же самое, что и с любым другим миниатюрным скриптом. Просто вызовите его с файлами или папками, где вы хотите создавать эскизы в качестве аргументов, например:
thumbnailer /home/Documents
Спецификации миниатюр в KDE / GNOME :
https://bugs.kde.org/show_bug.cgi?id=393015 https://api.kde.org/frameworks/kio/html/previewjob_8cpp_source.html https: // lazka. gythub.io/pgi-docs/GnomeDesktop-3.0/classes/DesktopThumbnailFactory.htmlНастройка метаданных PNG:
https://bugs.kde.org/show_bug. cgi? id = 393015 https://bugs.kde.org/show_bug.cgi?id=393015Нашел решение (здесь для Ubuntu 17.10, но отлично работает и для 18.04):
sudo apt remove indicator-application
Нашел решение (здесь для Ubuntu 17.10, но отлично работает и для 18.04):
sudo apt remove indicator-application
Нашел решение (здесь для Ubuntu 17.10, но отлично работает и для 18.04):
sudo apt remove indicator-application
Нашел решение (здесь для Ubuntu 17.10, но отлично работает и для 18.04):
sudo apt remove indicator-application
Нашел решение (здесь для Ubuntu 17.10, но отлично работает и для 18.04):
sudo apt remove indicator-application
Нашел решение (здесь для Ubuntu 17.10, но отлично работает и для 18.04):
sudo apt remove indicator-application
Нашел решение (здесь для Ubuntu 17.10, но отлично работает и для 18.04):
sudo apt remove indicator-application
Я столкнулся с той же проблемой. Я попытался полностью удалить индикатор-приложение-сервис, и, видите, проблема исчезла! Я думаю, что начиная с 16.04 оставляет на моей машине некоторые вещи, связанные с Unity, которые не только устарели, но и препятствуют правильной работе расширения AppIndicator.
Что делать:
sudo apt remove indicator-application
Я столкнулся с той же проблемой. Я попытался полностью удалить индикатор-приложение-сервис, и, видите, проблема исчезла! Я думаю, что начиная с 16.04 оставляет на моей машине некоторые вещи, связанные с Unity, которые не только устарели, но и препятствуют правильной работе расширения AppIndicator.
Что делать:
sudo apt remove indicator-application
Я столкнулся с той же проблемой. Я попытался полностью удалить индикатор-приложение-сервис, и, видите, проблема исчезла! Я думаю, что начиная с 16.04 оставляет на моей машине некоторые вещи, связанные с Unity, которые не только устарели, но и препятствуют правильной работе расширения AppIndicator.
Что делать:
sudo apt remove indicator-application
Alt + f2
и выполните команду r
.
– Rasmus
12 April 2018 в 10:53
У меня та же проблема с 17.10. По крайней мере, следующая команда помогает здесь вернуть значки до следующей перезагрузки:
killall indicator-application-service
Изменить: это обходное решение работает отлично здесь, без использования какого-либо расширения gnome, такого как «Topicon-plus» или «Kstatusnotifieritem» / appindicator support ".
Ничего из предложенных работ для приложения Shutter в Ubuntu 18.04, поскольку пакет libgtk2-appindicator-perl удален из основного репо. Чтобы включить индикатор затвора в Ubuntu 18.04, установите libappindicator-dev:
libappindicator-dev
и расширение Gtk2 :: AppIndicator perl:
sudo cpan -i Gtk2::AppIndicator
Перезапустите Shutter, его индикатор должен появиться теперь в системный лоток.
Нажмите девять точек на доке.
В поле поиска напишите «tweak». Вы увидите инструменты настройки gnome:
Если у вас его нет, вы можете щелкнуть по нему и открыть центр программного обеспечения.
После этого запустите твики и перейдите к расширениям.
Просто включите аппликаторы и у вас будет рабочий лоток для системы, где вы можете увидеть Dropbox, телеграмму или другие значки.
Еще одно возможное решение - удалить файл [autorart.desktop] файла Indicator-application
. Он установлен в
/etc/xdg/autostart/indicator-application.desktop
Если вы не хотите его удалять, а иногда используете Unity 7. Это заставило Indicator-application
не запускаться при входе в систему.
Как предлагается здесь , попробуйте удалить все устаревшие индикаторы, если какой-либо еще присутствует
indicator-application
indicator-appmenu
indicator-bluetooth
indicator-common
indicator-datetime
indicator-keyboard
indicator-messages
indicator-network
indicator-power
indicator-printers
indicator-session
indicator-sound
indicator-transfer
indicator-transfer-download-manager
Просто выполните эту команду в терминале:
sudo apt purge indicator-application indicator-appmenu indicator-bluetooth indicator-common indicator-datetime indicator-keyboard indicator-messages indicator-network indicator-power indicator-printers indicator-session indicator-sound indicator-transfer indicator-transfer-download-manager
У меня та же проблема с 17.10. По крайней мере, следующая команда помогает здесь вернуть значки до следующей перезагрузки:
killall indicator-application-service
Изменить: это обходное решение работает отлично здесь, без использования какого-либо расширения gnome, такого как «Topicon-plus» или «Kstatusnotifieritem» / appindicator support ".
Ничего из предложенных работ для приложения Shutter в Ubuntu 18.04, поскольку пакет libgtk2-appindicator-perl удален из основного репо. Чтобы включить индикатор затвора в Ubuntu 18.04, установите libappindicator-dev:
libappindicator-dev
и расширение Gtk2 :: AppIndicator perl:
sudo cpan -i Gtk2::AppIndicator
Перезапустите Shutter, его индикатор должен появиться теперь в системный лоток.
Еще одно возможное решение - удалить файл [autorart.desktop] файла Indicator-application
. Он установлен в
/etc/xdg/autostart/indicator-application.desktop
Если вы не хотите его удалять, а иногда используете Unity 7. Это заставило Indicator-application
не запускаться при входе в систему.
Как предлагается здесь , попробуйте удалить все устаревшие индикаторы, если какой-либо еще присутствует
indicator-application
indicator-appmenu
indicator-bluetooth
indicator-common
indicator-datetime
indicator-keyboard
indicator-messages
indicator-network
indicator-power
indicator-printers
indicator-session
indicator-sound
indicator-transfer
indicator-transfer-download-manager
Просто выполните эту команду в терминале:
sudo apt purge indicator-application indicator-appmenu indicator-bluetooth indicator-common indicator-datetime indicator-keyboard indicator-messages indicator-network indicator-power indicator-printers indicator-session indicator-sound indicator-transfer indicator-transfer-download-manager
У меня та же проблема с 17.10. По крайней мере, следующая команда помогает здесь вернуть значки до следующей перезагрузки:
killall indicator-application-service
Изменить: это обходное решение работает отлично здесь, без использования какого-либо расширения gnome, такого как «Topicon-plus» или «Kstatusnotifieritem» / appindicator support ".
Ничего из предложенных работ для приложения Shutter в Ubuntu 18.04, поскольку пакет libgtk2-appindicator-perl удален из основного репо. Чтобы включить индикатор затвора в Ubuntu 18.04, установите libappindicator-dev:
libappindicator-dev
и расширение Gtk2 :: AppIndicator perl:
sudo cpan -i Gtk2::AppIndicator
Перезапустите Shutter, его индикатор должен появиться теперь в системный лоток.
Нажмите девять точек на доке.
В поле поиска напишите «tweak». Вы увидите инструменты настройки gnome:
Если у вас его нет, вы можете щелкнуть по нему и открыть центр программного обеспечения.
После этого запустите твики и перейдите к расширениям.
Просто включите аппликаторы и у вас будет рабочий лоток для системы, где вы можете увидеть Dropbox, телеграмму или другие значки.
Еще одно возможное решение - удалить файл [autorart.desktop] файла Indicator-application
. Он установлен в
/etc/xdg/autostart/indicator-application.desktop
Если вы не хотите его удалять, а иногда используете Unity 7. Это заставило Indicator-application
не запускаться при входе в систему.
Как предлагается здесь , попробуйте удалить все устаревшие индикаторы, если какой-либо еще присутствует
indicator-application
indicator-appmenu
indicator-bluetooth
indicator-common
indicator-datetime
indicator-keyboard
indicator-messages
indicator-network
indicator-power
indicator-printers
indicator-session
indicator-sound
indicator-transfer
indicator-transfer-download-manager
Просто выполните эту команду в терминале:
sudo apt purge indicator-application indicator-appmenu indicator-bluetooth indicator-common indicator-datetime indicator-keyboard indicator-messages indicator-network indicator-power indicator-printers indicator-session indicator-sound indicator-transfer indicator-transfer-download-manager