{"id":23771636,"url":"https://github.com/michurin/unote","last_synced_at":"2026-01-27T14:34:55.714Z","repository":{"id":78009160,"uuid":"49190835","full_name":"michurin/unote","owner":"michurin","description":"Simple standalone GUI notification utility with simple network API","archived":false,"fork":false,"pushed_at":"2025-09-14T06:09:39.000Z","size":17,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-14T08:17:46.345Z","etag":null,"topics":["desktop","gui","network","notification","remote-control"],"latest_commit_sha":null,"homepage":"","language":"Tcl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michurin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-01-07T08:10:12.000Z","updated_at":"2025-09-14T06:09:42.000Z","dependencies_parsed_at":"2025-02-21T04:26:51.849Z","dependency_job_id":"8551afc5-46f2-4d55-b56e-cb9520daf426","html_url":"https://github.com/michurin/unote","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/michurin/unote","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michurin%2Funote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michurin%2Funote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michurin%2Funote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michurin%2Funote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michurin","download_url":"https://codeload.github.com/michurin/unote/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michurin%2Funote/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28815150,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["desktop","gui","network","notification","remote-control"],"created_at":"2025-01-01T04:20:36.366Z","updated_at":"2026-01-27T14:34:55.707Z","avatar_url":"https://github.com/michurin.png","language":"Tcl","funding_links":[],"categories":[],"sub_categories":[],"readme":"What is uNote\n=============\n\n`uNote` is very simple and flexible standalone GUI notification utility.\n\nIt is not affiliated with any of window managers.\nIt provides network interface to accept messages.\nIt makes it possible to receive messages from different scripts,\neven from other hosts. And it makes very easy to raise\nnotifications from routines like `cron` and `at` without\ncare about `$DISPLAY` and `Xauth`.\n\n`uNote` is written on `Tcl/Tk` and does not require\nany additional libraries.\n\n`uNote` supports multiply windows and can display two types of messages:\n*text* and *progress bar*.\n\nHow to run\n==========\n\n`uNote` is one file (script). Just run it.\n\nTo run it automatically add it to `~/.xinitrc`.\n\nHow to send message\n===================\n\nSimplest:\n\n```sh\necho '|Hello, world!' | nc localhost 7779\n```\n\nBig red label at specified place, displayed for 10 seconds:\n\n```sh\necho 'geometry=+10+10,fg=f00,bg=ff0,size=24,padx=120,duration=10|Hello, world!' | nc localhost 7779\n```\n\nGreen 80% bar:\n\n```sh\necho 'type=bar,geometry=+10+10,percent=80,width=200,height=10,duration=10,fg=0f0,bg=000,bd=090|' | nc localhost 7779\n```\n\nMessage structure and params\n============================\n\nMessage structure\n-----------------\n\nMessage consists of two parts, separated by pipe (\"|\"). First\n(left) part contains options, second (right) part is a message itself.\n\nSo, simplest text message is \"`|OK`\":\n\n```sh\necho '|OK' | nc localhost 7779\n```\n\nParams overview\n---------------\n\nParams are:\n\n* `type`: `text` or `bar` (default `text`)\n* `geometry`: position in X-format like `+0+0`, `-10-0` etc.\n* `duration`: seconds\n* `service`: name of queues (see below)\n* `fg`: foreground color\n* `bg`: background color\n* `bd`: border color\n* `tc`: percent text color (for progress bar)\n* `padx`: horizontal padding\n* `pady`: vertical padding\n* `size`: font size\n* `family`: font family like `Droid Serif` (command `fc-list : family` show all font families on your X)\n* `bold`: bold flag\n* `justify`: text justification (left, right, center)\n* `percent`: percents (for progress bar)\n\nWindows and queues (`service`)\n------------------------------\n\nFor every unique `geometry` value raise its own window.\n\nEvery window has its own message queue and displays\nonly one message form top of queue.\n\nNew message is appended to queue, and replaces existence\nwith same value of `service`. If `service` not specified, it\nwill be generated by random number generator.\n\nCode snippets\n=============\n\nCall from Perl\n--------------\n\n```perl\n#!/usr/bin/perl\n\nuse strict;\nuse warnings;\nuse Socket;\n\nmy $message = 'DONE!';\n\nmy $host = 'localhost';\nmy $port = 7779;\nsocket(SOCK, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))[2]);\nconnect(SOCK, sockaddr_in($port, inet_aton($host)));\nsend(\n    SOCK,\n    'geometry=+0+10,bg=99f,fg=000,size=24,padx=12,duration=10,family=Ubuntu Condensed|' .\n    $message,\n    0\n);\n```\n\nCall from Python (v2 and v3)\n----------------------------\n\n```python\n#!/usr/bin/python\n\nimport socket\n\nHOST = 'localhost'\nPORT = 7779\n\ns = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\ns.connect((HOST, PORT))\ns.sendall(b'|Hello, world')\ns.close()\n```\n\nComplete useful sh example\n--------------------------\n\nScript to send message with two possible color schemes.\n\n```sh\n#!/bin/sh\n\nsets='service=remote,duration=20,bg=#224,fg=#99f,size=40,padx=30,family=Ubuntu,geometry=+700-0'\n\nif test \"a$#\" = 'a2'\nthen\n  if test \"a$1\" = 'a--small-green'\n  then\n    sets='service=remote,duration=20,bg=#222,fg=#0f0,size=14,padx=10,family=Ubuntu,geometry=+200+0'\n  else\n    echo \"Ignore option $1\"\n  fi\n  shift\nfi\n\nmess=$1\nif test -z \"$mess\"\nthen\n  mess=\"`uname -n`: Complete\"\nfi\n\necho -n \"$sets|$mess\" |\nnc localhost 7779\n```\n\nCreate ssh tunnel\n-----------------\n\nYou can add to your `~/.ssh/config`:\n\n```sshconfig\nRemoteForward 7779 localhost:7779\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichurin%2Funote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichurin%2Funote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichurin%2Funote/lists"}