Compare commits

...

2 Commits

Author SHA1 Message Date
d8b01cdaee
eizoctl: add an option to filter by serial number
All checks were successful
Alpine 3.21 Success
It turns out that this is actually critical when switching inputs
in certain wild setups.
2025-07-31 21:16:16 +02:00
135f336a7c
eizoctl: add an option to list monitors 2025-07-31 21:15:26 +02:00
2 changed files with 36 additions and 5 deletions

View File

@ -70,6 +70,17 @@ exe := A_Startup . "\eizoctltray.exe"
}
```
On macOS, the simplest way to bind keyboard shortcuts is the Shortcuts app,
with _Run Shell Scripts_ actions:
```
/Applications/eizoctltray.app/Contents/MacOS/eizoctltray -q --input HDMI
```
If you have issues with entering a specific key combination, like I did
with ^⌘F1 etc., try changing it later within _System Settings_ → _Keyboard_ →
_Keyboard Shortcuts..._ → _Services_ → _Shortcuts_.
elksmart-comm
~~~~~~~~~~~~~
_elksmart-comm_ interfaces with ELK Smart infrared dongles EKX4S and EKX5S-T,

View File

@ -1037,6 +1037,10 @@ eizo_watch(struct eizo_monitor *m, print_fn output, print_fn error)
}
static const char *usage = "Usage: %s OPTION...\n\n"
" -l, --list\n"
" List all connected EIZO monitors, with their serial number.\n"
" -s, --serial SERIAL\n"
" Only act on the monitor matching the specified serial number.\n"
" -b, --brightness [+-]BRIGHTNESS\n"
" Change monitor brightness; values go from 0 to 1 and may be relative.\n"
" -i, --input NAME\n"
@ -1057,6 +1061,8 @@ run(int argc, char *argv[], print_fn output, print_fn error)
{
const char *name = argv[0];
static struct option opts[] = {
{"list", no_argument, NULL, 'l'},
{"serial", required_argument, NULL, 's'},
{"brightness", required_argument, NULL, 'b'},
{"input", required_argument, NULL, 'i'},
{"restart", no_argument, NULL, 'r'},
@ -1069,11 +1075,17 @@ run(int argc, char *argv[], print_fn output, print_fn error)
int quiet = 0;
double brightness = NAN;
bool relative = false, restart = false, events = false;
const char *port = NULL;
bool list = false, relative = false, restart = false, events = false;
const char *serial = NULL, *port = NULL;
int c = 0;
while ((c = getopt_long(argc, argv, "b:i:reqhV", opts, NULL)) != -1)
while ((c = getopt_long(argc, argv, "ls:b:i:reqhV", opts, NULL)) != -1)
switch (c) {
case 'l':
list = true;
break;
case 's':
serial = optarg;
break;
case 'b':
relative = *optarg == '+' || *optarg == '-';
if (sscanf(optarg, "%lf", &brightness) && isfinite(brightness))
@ -1123,8 +1135,6 @@ run(int argc, char *argv[], print_fn output, print_fn error)
if (quiet > 1)
error = print_dummy;
// It should be possible to choose a particular monitor,
// but it is generally more useful to operate on all of them.
struct hid_device_info *devs = hid_enumerate(USB_VID_EIZO, 0), *p = devs;
for (; p; p = p->next) {
struct eizo_monitor m = {};
@ -1133,6 +1143,15 @@ run(int argc, char *argv[], print_fn output, print_fn error)
continue;
}
if (list)
output("%s %s\n", m.product, m.serial);
// Generously assuming that different products/models
// don't share serial numbers,
// which would otherwise deserve another filtering option.
if (serial && strcmp(serial, m.serial))
goto next;
if (isfinite(brightness)) {
double prev = 0.;
if (!eizo_get_brightness(&m, &prev)) {
@ -1177,6 +1196,7 @@ run(int argc, char *argv[], print_fn output, print_fn error)
error("%s\n", m.error);
}
next:
eizo_monitor_close(&m);
}
hid_free_enumeration(devs);