Я создал файлы .desktop из сценария python с помощью centos 7 (я развертываю удаленно в файлах рабочего стола ssh), этот ярлык выполняет другой сценарий python. ОС была обновлена ​​до centos 8.

К сожалению, мои записи на рабочем столе больше не работали для пользователей.

2 проблемы:

-Для пользователя значок не отображается (файл не является доверенным, пользователю необходимо доверять файлу для отображения значка). Я пытаюсь выполнить: gio set myShortcup.desktop metadata :: trust да, похоже, все работает нормально, но пользователь должен нажать f5, чтобы обновить рабочий стол)

-Когда пользователь дважды щелкает файл .desktop, открывается текстовый редактор с кодом входа на рабочий стол: но для меня на удаленном терминале с помощью команды ./myShortcut.desktop запускается приложение). Пользователь должен щелкнуть правой кнопкой мыши файл и сделать его исполняемым, чтобы решить проблему, и он работает только в папке рабочего стола (а не непосредственно на рабочем столе).

Пожалуйста, как я могу решить эти две проблемы удаленно и при создании этих ярлыков?

Создание кода:

#!/usr/bin/env python2

import os, sys, logging
import glob
import os.path
import datetime

# DECLARATION
desktopPath         = "/home/user/Desktop/"
scriptPath          = "/home/user/Desktop/DEPLOY/"

# METHODS
def createShortcut(fileName):

        # File name
        shortcutName = fileName.replace(".raw","") + ".desktop"

        # Remove file if exists
        try:
                os.remove(desktopPath + shortcutName)
        except OSError:
                pass

        with open(desktopPath + shortcutName, "w") as shortcut:
                shortcut.write("[Desktop Entry]\n")
                shortcut.write("Name=" + fileName.replace(".raw","") +"\n")
                shortcut.write("Exec=python2 " + scriptPath +"myApp.py -f " + fileName + "\n")
                shortcut.write("Terminal=true\n")
                shortcut.write("Type=Application\n")
                shortcut.write("Icon="+ scriptPath + "icon.png\n")

        shortcut.close()

        # Add execution permission
        try:
                os.chmod(desktopPath + shortcutName, 0o777)
        except OSError:
                pass


# MAIN CODE 

def main(argv):

        # Set logging level
        logging.basicConfig(stream=sys.stderr, level=logging.INFO)

        # Loop raw files
        fileList = glob.glob('*.raw')

        for i in fileList:

                # Create shortcut on PC desktop
                fileName = i
                createShortcut(fileName)



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

Созданный файл:

[Desktop Entry]
Name=myShortcut
Exec=python2 /home/user/Desktop/DEPLOY/myApp.py -f myShortcut.raw
Terminal=true
Type=Application
Icon=/home/user/Desktop/DEPLOY/icon.png

Благодарность

2
Nathan 19 Июн 2020 в 08:40

1 ответ

Лучший ответ

Я тестировал виртуальную машину centos 8.2.2004 с виртуальным боксом дома, и я воспроизвел проблему, я не мог выполнить сценарий, также не могу щелкнуть правой кнопкой мыши «разрешить запуск».

После нескольких часов исследований, чтобы решить эти проблемы, вам нужно отредактировать chmod 777 на 775 (возможно, Linux security ... selinux? Я точно не знаю, почему) И вам также нужно добавить команду gio metadata trust (не надо '' Обратите внимание на мой плохой отступ):

        # Add execution permission
        try:
        os.chmod(desktopPath + shortcutName, 0o755)
        cmd="gio set "+ desktopPath+shortcutName + " \"metadata::trusted\" true"
        os.system(cmd)
        except OSError:
                pass

И после этого все заработало. Протестируйте его на своей машине и сообщите нам, решило ли оно проблему.

1
Masa 19 Июн 2020 в 08:56