오래 전에, 나는 아침, 낮, 저녁, 밤과 같은 것을 시간을 내기 위해 패널 앱에서 시계를 설정했습니다. 매우 구체적이지 않은 광범위한 스트로크 KDE 데스크톱 일 수 있습니다. 나는 지금 우분투 메이트에 있는데, 메이트 패널 에서이 모호한 시간 설명을 얻는 방법이 있습니까?
오래 전에, 나는 아침, 낮, 저녁, 밤과 같은 것을 시간을 내기 위해 패널 앱에서 시계를 설정했습니다. 매우 구체적이지 않은 광범위한 스트로크 KDE 데스크톱 일 수 있습니다. 나는 지금 우분투 메이트에 있는데, 메이트 패널 에서이 모호한 시간 설명을 얻는 방법이 있습니까?
답변:
운 좋게도 15.10부터 우분투 메이트 에 대한 질문이 있었지만 지표를 사용할 수도 있습니다 Mate
. 그 결과, 아래의 대답은 적어도이 작동 Unity
하고 Mate
및에 (테스트) Xubuntu
.
설정을 변경하는 GUI는 여전히 따라야하지만 (작동 중) 적어도 20 시간 동안 아래 표시기를 테스트했으며 (예상대로) 오류없이 작업을 수행했습니다.
표시기는 다음과 같은 옵션을 제공합니다.
문자 시간 표시
텍스트 "주요 지역"을 보여줍니다 ( 밤 , 아침 , 낮 , 저녁 )
오전 / 오후 표시
한 번에 모두 표시 (또는이 3 가지 조합)
매 분기마다 시간을 말하십시오 ( espeak
필수).
선택적으로 시간은 희미하게 표시됩니다 . 5 분 반올림, 예 : 10:
43-> quarter to eleven
.
해결책은 스크립트, 별도의 모듈 및 아이콘으로 존재하며 하나의 동일한 디렉토리 에 저장해야합니다 .
아이콘 :
마우스 오른쪽 버튼으로 클릭하고 (정확하게) 저장하십시오 indicator_icon.png
모듈 :
텍스트 시간 및 기타 표시된 모든 정보를 생성하는 모듈입니다. 코드를 복사하여 하나의 동일한 디렉토리에 위의 아이콘과 함께 (다시 정확하게 ) 저장하십시오 .tcalc.py
#!/usr/bin/env python3
import time
# --- set starttime of morning, day, evening, night (whole hrs)
limits = [6, 9, 18, 21]
# ---
periods = ["night", "morning", "day", "evening", "night"]
def __fig(n):
singles = [
"midnight", "one", "two", "three", "four", "five", "six",
"seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "quarter", "sixteen", "seventeen", "eighteen", "nineteen",
]
tens = ["twenty", "half"]
if n < 20:
return singles[n]
else:
if n%10 == 0:
return tens[int((n/10)-2)]
else:
fst = tens[int(n/10)-2]
lst = singles[int(str(n)[-1])]
return fst+"-"+lst
def __fuzzy(currtime):
minutes = round(currtime[1]/5)*5
if minutes == 60:
currtime[1] = 0
currtime[0] = currtime[0] + 1
else:
currtime[1] = minutes
currtime[0] = 0 if currtime[0] == 24 else currtime[0]
return currtime
def textualtime(fuzz):
currtime = [int(n) for n in time.strftime("%H %M %S").split()]
currtime = __fuzzy(currtime) if fuzz == True else currtime
speak = True if currtime[1]%15 == 0 else False
period = periods[len([n for n in limits if currtime[0] >= n])]
# define a.m. / p.m.
if currtime[0] >= 12:
daytime = "p.m."
if currtime[0] == 12:
if currtime[1] > 30:
currtime[0] = currtime[0] - 12
else:
currtime[0] = currtime[0] - 12
else:
daytime = "a.m."
# convert time to textual time
if currtime[1] == 0:
t = __fig(currtime[0])+" o'clock" if currtime[0] != 0 else __fig(currtime[0])
elif currtime[1] > 30:
t = __fig((60 - currtime[1]))+" to "+__fig(currtime[0]+1)
else:
t = __fig(currtime[1])+" past "+__fig(currtime[0])
return [t, period, daytime, currtime[2], speak]
스크립트 :
이것은 실제 지표입니다. moderntimes.py
위의 아이콘 및 th 모듈과 함께 하나의 동일한 디렉토리에 코드를 복사하여로 저장하십시오 .
#!/usr/bin/env python3
import os
import signal
import subprocess
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, AppIndicator3, GObject
import time
from threading import Thread
import tcalc
# --- define what to show:
# showtime = textual time, daytime = a.m./p.m. period = "night"/"morning"/day"/"evening"
# speak = speak out time every quarter, fuzzy = round time on 5 minutes
showtime = True; daytime = False; period = True; speak = True; fuzzy = True
class Indicator():
def __init__(self):
self.app = 'about_time'
path = os.path.dirname(os.path.abspath(__file__))
self.indicator = AppIndicator3.Indicator.new(
self.app, os.path.abspath(path+"/indicator_icon.png"),
AppIndicator3.IndicatorCategory.OTHER)
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.create_menu())
self.update = Thread(target=self.get_time)
self.update.setDaemon(True)
self.update.start()
def get_time(self):
# the first loop is 0 seconds, the next loop is 60 seconds,
# in phase with computer clock
loop = 0; timestring1 = ""
while True:
time.sleep(loop)
tdata = tcalc.textualtime(fuzzy)
timestring2 = tdata[0]
loop = (60 - tdata[3])+1
mention = (" | ").join([tdata[item[1]] for item in [
[showtime, 0], [period, 1], [daytime, 2]
]if item[0] == True])
if all([
tdata[4] == True,
speak == True,
timestring2 != timestring1,
]):
subprocess.Popen(["espeak", '"'+timestring2+'"', "-s", "130"])
# [4] edited
GObject.idle_add(
self.indicator.set_label,
mention, self.app,
priority=GObject.PRIORITY_DEFAULT
)
timestring1 = timestring2
def create_menu(self):
menu = Gtk.Menu()
item_quit = Gtk.MenuItem('Quit')
item_quit.connect('activate', self.stop)
menu.append(item_quit)
menu.show_all()
return menu
def stop(self, source):
Gtk.main_quit()
Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
스크립트가 필요합니다 espeak
:
sudo apt-get install espeak
위의 세 파일을 모두 하나의 동일한 디렉토리에 복사하십시오 . 스크립트, 모듈 및 아이콘에 표시된대로 정확하게 이름이 지정됩니다 .
스크립트 헤드 ( moderntimes.py
)에서 표시 할 정보 및 방법을 정의하십시오. 간단하게 설정 True
하거나 False
라인에 :
# --- define what to show:
# time = textual time, daytime = a.m./p.m. period = "night"/"morning"/day"/"evening"
# speak = speak out time every quarter, fuzzy = round time on 5 minutes
showtime = True; daytime = False; period = True; speak = False; fuzzy = True
모듈 의 헤드 에서 다음 라인에서 아침 , 낮 , 저녁 , 밤 을 시작하는 시간을 변경할 수 있습니다 .
# --- set starttime of morning, day, evening, night (whole hrs)
limits = [6, 9, 18, 21]
# ---
지금 스크립트에서 다른 것을 만지지 마십시오 :)
Ubuntu Mate 사용자 는 시스템에서 표시기 사용을 활성화해야합니다. 시스템> 환경 설정> 모양 및 느낌> 메이트 조정> 인터페이스> "표시기 활성화"를 선택하십시오.
다음 명령으로 표시기를 실행하십시오.
python3 /path/to/moderntimes.py
시작 응용 프로그램에서 실행
시작 응용 프로그램에서 명령을 실행하는 경우 많은 경우 특히 지표에 약간의 휴식을 추가해야합니다.
/bin/bash -c "sleep 15 && python3 /path/to/moderntimes.py"
의심 할 여지없이 스크립트가 다음 며칠 동안 여러 번 변경 / 업데이트 될 것입니다. 특히 피드백을 받고 싶은 한 가지는 디지털 시간이 텍스트 시간으로 변환되는 "스타일"입니다. 지금하는 방식 :
전체 시간, 예 :
six o'clock
시간 후 30 분 미만, 예.
twenty past eleven
시간 후 30 분 예 :
half past five
30 분 이상 예 :
twenty to five
15 분이 언급됩니다 quarter
. 예 :
quarter past six
예외는 자정이며이라고 불리지 zero
않지만 다음 midnight
과 같습니다.
quarter past midnight
스크립트는 첫 번째 timecheck-loop 후 루프가 컴퓨터 시계에서 자동으로 동기화되기 때문에 주스가 매우 적습니다. 따라서 스크립트는 시간을 확인하고 표시된 시간을 분당 한 번만 편집하고 나머지 시간은 잠자 게합니다.
오늘 (2016-4-9)에 따라 ppa의 세련된 버전을 사용할 수 있습니다. ppa에서 설치하려면 :
sudo apt-add-repository ppa:vlijm/abouttime
sudo apt-get update
sudo apt-get install abouttime
이 버전의 요일은 위의 스크립트 버전과 비교하여 변경되었습니다. 이제는 다음과 같습니다.
morning 6:00-12:00
afternoon 12:00-18:00
evening 18:00-24:00
night 24:00-6:00
... 및 표시기에는 주간
/ 일요일 / 저녁 / 야간 아이콘 변경 옵션이 있습니다 .
언급 했듯이이 버전은 Mate
(원래 질문에서) Unity
및 에서 모두 테스트되었습니다 Xubuntu
.
Kubuntu (Plasma Desktop Ubuntu 배포판)를 사용하는 경우 "퍼지 시계"라는 내장 위젯이 있습니다. 최소 14.04 이후이거나 플라스마 4가 나오기 오래 전부터 여전히 플라스마 5에 있습니다. 쿠분투 16.04에 나와 있습니다.
퍼지 시계는 아날로그 시계를 읽는 것처럼 (예 : "10 이후") 5 분 단위로 "정확한"값으로 설정할 수 있지만 3 개의 "후지"설정이 있으며 그 중 하나는 "오후"와 같은 판독 값을 제공합니다. 그리고 "주말!" (일요일 오후에는 내일 "월요일"이라고 가정합니다).
퍼지 시계가 다른 우분투 풍미에서 사용할 수 있는지 모르겠습니다. 시스템의 Xfuntu에서 (Xubuntu에서 찾은) 그것을 보았지만 OS가 Kubuntu로 설치되었으므로 퍼지 시계가 있는지 확실하지 않습니다. xfce뿐만 아니라 KDE / Plasma에 기본적으로 제공되며 Unity에서 사용할 수 있는지 또는 Mate에서 사용할 수 있는지 여부입니다.