Как я могу открыть thunar, чтобы он выбирал конкретный файл?

Только что потратил около 6 часов на создание загрузочного устройства USB для Linux Mint, резервное копирование всех моих данных с двух разделов и различные попытки спасения после получения ужасного сообщения sbin/init not found...

Это произошло после небольшого обновления - система не перезагружалась. Похоже, что вся папка sbin была таинственным образом удалена и не могла быть восстановлена. Единственным разумным советом, который я смог найти, была "переустановка".

Решение (менее 5 минут!!) было следующим:

  1. загрузитесь с оригинального установочного диска (Cinnamon Mint 17. 1 в данном случае),
  2. открыть файловый проводник от имени root (либо щелкните правой кнопкой мыши на папке и выберите "открыть как root", либо откройте терминал и введите 'sudo nemo'
  3. найти папку sbin живой установки
  4. смонтировать поврежденный раздел Mint (щелкните на значке)
  5. изменить разрешения, применяемые к папке sbin (щелкните правой кнопкой мыши, Properties, Permissions, Others, File access, read and write - затем нажмите 'Apply Permissions to Enclosed Files')
  6. скопируйте всю папку sbin в корневой каталог установленной системы (/). (Здесь находятся системные папки 'bin', 'boot', 'home', 'usr' и т.д.)
  7. Перезагрузка
5
08.05.2015, 16:20
2 ответа

Немного покопавшись, я обнаружил, что это возможно с помощью D-Bus:

#!/usr/bin/env python
import dbus
import os
import sys
import urlparse
import urllib


bus = dbus.SessionBus()
obj = bus.get_object('org.xfce.Thunar', '/org/xfce/FileManager')
iface = dbus.Interface(obj, 'org.xfce.FileManager')

_thunar_display_folder = iface.get_dbus_method('DisplayFolder')
_thunar_display_folder_and_select = iface.get_dbus_method('DisplayFolderAndSelect')


def display_folder(uri, display='', startup_id=''):
    _thunar_display_folder(uri, display, startup_id)


def display_folder_and_select(uri, filename, display='', startup_id=''):
    _thunar_display_folder_and_select(uri, filename, display, startup_id)


def path_to_url(path):
    return urlparse.urljoin('file:', urllib.pathname2url(path))


def url_to_path(url):
    return urlparse.urlparse(url).path


def main(args):
    path = args[1]  # May be a path (from cmdline) or a file:// URL (from OS)
    path = url_to_path(path)
    path = os.path.realpath(path)
    url = path_to_url(path)

    if os.path.isfile(path):
        dirname = os.path.dirname(url)
        filename = os.path.basename(url)
        display_folder_and_select(dirname, filename)
    else:
        display_folder(url)


if __name__ == '__main__':
    main(sys.argv)

Выполнить с помощью:

$ ./thunar-open-file.py /home/user/myfile.txt

И он все равно откроет папку, если вы передадите это:

$ ./thunar-open-file.py /home/user/

screencast for hardcore proof

5
27.01.2020, 20:35

Опираясь на ответ из theY4Kman, вот как это сделать без Python:

dbus-send --type=method_call --dest=org.xfce.Thunar /org/xfce/FileManager org.xfce.FileManager.DisplayFolderAndSelect string:"/home/user/Downloads" string:"File.txt" string:"" string:""

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

9
27.01.2020, 20:35

Теги

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