- 작성시간 : 2022/07/10 03:48
- 퍼머링크 : mcchae.egloos.com/11411562
- 덧글수 : 0
휴우 관련 정보를 몇번 삽질하다가 해결했습니다.
다른 분들은 시행착오를 안하시기를 바라며...
데비안 11 (불스아이) 에 트레이 관련 라이브러리가,
libayatanaapppindicator 로 변경되었다 하네요.
우선은 다음과 같은 라이브러리가 있는지 확인하구요,
$ apt list -i *appindicator*
Listing... 완료
gir1.2-ayatanaappindicator3-0.1/stable,now 0.5.5-2 amd64 [installed]
libayatana-appindicator3-1/stable,now 0.5.5-2 amd64 [installed,automatic]
libayatana-appindicator3-dev/stable,now 0.5.5-2 amd64 [installed]
없으면 해당 라이브러러리를 apt로 설치합니다.
다음은 requirements.txt 내용입니다.
# sudo apt install python3-dev
# sudo apt install libgirepository1.0-dev
PyGObject
xmltodict
첫 두줄의 코멘트는 PyGObject를 소스에서 빌드하는데 필요한 것이었습니다.
아래 샘플은
# This code was adapted from an example for a tutorial on Ubuntu Unity/Gnome AppIndicators:
# http://candidtim.github.io/appindicator/2014/09/13/ubuntu-appindicator-step-by-step.html
의 내용을 참조하여 돌도록 수정한 것입니다.
import gi
import signal
import json
import xmltodict
import urllib.request
gi.require_version('Gtk', '3.0')
# gi.require_version('AppIndicator3', '0.1')
gi.require_version('AyatanaAppIndicator3', '0.1')
gi.require_version('Notify', '0.7')
from gi.repository import Gtk as gtk
# from gi.repository import AppIndicator3 as appindicator
from gi.repository import AyatanaAppIndicator3 as appindicator
from gi.repository import Notify as notify
APPINDICATOR_ID = 'cndbappindicator'
def main():
indicator = appindicator.Indicator.new(
APPINDICATOR_ID,
"network-idle-symbolic",
appindicator.IndicatorCategory.APPLICATION_STATUS)
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
indicator.set_menu(build_menu())
notify.init(APPINDICATOR_ID)
gtk.main()
def build_menu():
menu = gtk.Menu()
item_joke = gtk.MenuItem(label='Joke')
item_joke.connect('activate', joke)
menu.append(item_joke)
item_geoip = gtk.MenuItem(label='Geoip')
item_geoip.connect('activate', geoip)
menu.append(item_geoip)
item_quit = gtk.MenuItem(label='Quit')
item_quit.connect('activate', quit)
menu.append(item_quit)
menu.show_all()
return menu
def fetch_joke():
request = urllib.request.Request('http://api.icndb.com/jokes/random?limitTo=[nerdy]')
response = urllib.request.urlopen(request)
joke = json.loads(response.read())['value']['joke']
return joke
def joke(_):
notify.Notification.new("Joke", fetch_joke(), None).show()
def fetch_geoip():
request = urllib.request.Request('https://geoip.ubuntu.com/lookup')
response = urllib.request.urlopen(request)
payload = xmltodict.parse(response.read())
return json.dumps(payload, indent=4, separators=(',', ': '))
def geoip(_):
notify.Notification.new("Geoip", fetch_geoip(), None).show()
def quit(_):
notify.uninit()
gtk.main_quit()
if __name__ == "__main__":
signal.signal(signal.SIGINT, signal.SIG_DFL)
main()
데비안 11이 되면서
# gi.require_version('AppIndicator3', '0.1')
부분이
gi.require_version('AyatanaAppIndicator3', '0.1')
이렇게 하면 해결되었습니다.
어느 분께는 도움이 되셨기를 ..



덧글