elsa in mac

mac:Fedora-Asahi Remix, application link를 이용하여 pyhton GUI 엡 실행하기 본문

Asahi Linux

mac:Fedora-Asahi Remix, application link를 이용하여 pyhton GUI 엡 실행하기

elsa in mac 2024. 2. 24. 15:19

이번 포스트에서는 linux에서 application 링크를 만들고 사용하는 방법을 알아 봅시다.

application link 가 뭔가요 ?
application link 라는 것은 일종의 application 설치 기술서 입니다.  설치된 GUI 앱들의 경우 /usr/share/applications 디레토리 내에 해당 앱의 실행을 위한 정보를 파일형태로 포함하고 있게 됩니다. 예를 들어 아래의 경우는 터미널 에뮬레이터인 Alacritty의 application link 정보인 Alacritty.desktop 파일의 내용 입니다.

[Desktop Entry]
Type=Application
TryExec=alacritty
Exec=alacritty
Icon=Alacritty
Terminal=false
Categories=System;TerminalEmulator;

Name=Alacritty
GenericName=Terminal
Comment=A fast, cross-platform, OpenGL terminal emulator
StartupNotify=true
StartupWMClass=Alacritty
Actions=New;
X-Desktop-File-Install-Version=0.26

[Desktop Action New]
Name=New Terminal
Exec=alacritty

 

application link를 사용자가 만들어야 하는 경우가 있나요 ?
일반적으로 GUI 앱을 dnf 나 flatpak등으로 설치한 경우에는 이러한 link파일이 자동으로 추가가 됩니다. 하지만, package manager를 사용하지 않고, 특정 앱을 소스코드 상태에서 빌드하여 사용하는 경우, 혹은 사용자가 직접 GUI앱을 만드는 경우에는 사용자가 스스로 만들어야 하는 경우도 있습니다. 필요충분조건은 아닙니다만, 해당 앱을 일반 GUI앱들과 동일한 방식으로 쉽게 실행하고 싶다면 만들어 주는 것이 좋습니다. 

 

use case : python을 이용하여  Qt GUI 앱을 만든 경우
예를 들어 제목처럼 python을 이용하여 Qt GUI 앱을 만든 경우를 가정해 봅니다.  어찌되었던, python 코드이기 때문에 해당 앱을 실행하기 위해서는 터미널에서 아래와 같이 python3 으로 실행을 해 줘야 합니다.

python3 ~/qt-test.py

뭐 이런식으로 말이죠.

앞에 python3를 명시하지 않고, ./qt-test.py 만으로 python 프로그램을 실행시키려면. shell script와 유사하게 .py 소스의 맨 처음에 아래와 같은 구문을 넣어 주면 됩니다.

#!/usr/bin/env python3

하자만, KDE application link를 만들어 주면, 굳이 qt-test.py를 실행하기 위해 터미널을 열거나 할 필요 없이 launcher에서 곧바로 해당 python 앱을 실행 시킬 수 있습니다.

[Desktop Entry]
Name=QT-GUI_TEST
Comment=테스트 앱 입니다. 
Exec=/usr/bin/python3 /usr/local/bin/qt-test/qt-test.py
Icon=/usr/local/bin/qt-test/qt-test-icon.png
Terminal=false
Type=Application
Categories=Test;
Path=/usr/local/bin/qt-test/

Exec= 를 보면, /usr/bin/python3로 /usr/local/bin/qt-test/qt-test.py를 실행시키는 것을 알 수 있습니다. 터미널에서 qt-test.py를 실행시킬 때와 같은 방법이지요. ICon=을 통해 pyhton 코드이지만 해당 앱의 아이콘을 정의해 줄 수 있습니다. Terminal= 에서는 false로 정의하여 터미널을 실행 시키지 않는다고 설정합니다.

Path= 의 경우에는 해당 앱의 root directory를 정의해 주는 것 입니다.  예를들어 qt-test.py에서 사용자 module을 사용할 때 해당 .py들이 qt-test 디렉토리에 있는 경우 혹은 해당 py에서 사용하는 resource들 역시 qt-test.py 디렉토리에 위치한 경우, qt-test.py에서 해당 resource들을 절대 경로가 아닌 상대경로로 참조하는 경우에는 qt-test.py의 실행 root-directory를 정의해 주어야 합니다. 안 그러면 실행되면서 해당 외부 resouce들을 참조할 수 없다는 오류가 발생하게 됩니다.

application link 의 확장자는 .desktop 이며, /usr/share/applications/ 밑에 위치하면 됩니다.

Application Launcher인 Rofi 에서 qt-로 검색한 경우

설정한 대로 python코드와 resource들이 해당 위치에 위치하고 있고, application link(.desktop)를 /usr/share/applications에 넣은 경우 application Name에 정의한 앱 명으로 검색을 해 보면, 위와 같이 해당 앱의 아이콘과 함께 이름이 뜨는 것을 확인할 수 있습니다. 선택해 주면, 파이썬 코드 이지만 터미널 도움없이 앱이 실행되게 됩니다.

공유하기 링크
Comments