2022-08-12 20:46:36 +02:00
Hyprland exposes 2 UNIX Sockets, for controlling / getting info about Hyprland
via code / bash utilities.
2022-10-23 16:35:39 +02:00
# Hyprland Instance Signature (HIS)
2022-08-12 20:46:36 +02:00
2022-08-13 19:06:18 +02:00
```sh
2022-08-12 20:46:36 +02:00
echo $HYPRLAND_INSTANCE_SIGNATURE
```
# /tmp/hypr/\[HIS\]/.socket.sock
Used for hyprctl-like requests. See the
2022-08-13 19:06:18 +02:00
[Hyprctl page ](../Configuring/Using-hyprctl ) for
2022-08-12 20:46:36 +02:00
commands.
2023-02-02 12:29:32 +01:00
basically, write `[flag(s)]/command args` .
2022-08-12 20:46:36 +02:00
# /tmp/hypr/\[HIS\]/.socket2.sock
Used for events. Hyprland will write to each connected client live events like
this:
2022-10-12 17:08:11 +02:00
`EVENT>>DATA\n` (`\n` is a linebreak)
2022-08-12 20:46:36 +02:00
e.g.: `workspace>>2`
2022-10-23 16:35:39 +02:00
# Events list
2022-08-12 20:46:36 +02:00
2022-08-18 17:22:14 +02:00
| name | description | data |
| --- | --- | --- |
| workspace | emitted on workspace change. Is emitted ONLY when a user requests a workspace change, and is not emitted on mouse movements (see `activemon` ) | `WORKSPACENAME` |
| focusedmon | emitted on the active monitor being changed. | `MONNAME,WORKSPACENAME` |
| activewindow | emitted on the active window being changed. | `WINDOWCLASS,WINDOWTITLE` |
2023-02-06 14:17:44 +01:00
| activewindowv2 | emitted on the active window being changed. | `WINDOWADDRESS` |
2022-08-18 17:22:14 +02:00
| fullscreen | emitted when a fullscreen status of a window changes. | `0/1` (exit fullscreen / enter fullscreen) |
| monitorremoved | emitted when a monitor is removed (disconnected) | `MONITORNAME` |
| monitoradded | emitted when a monitor is added (connected) | `MONITORNAME` |
| createworkspace | emitted when a workspace is created | `WORKSPACENAME` |
| destroyworkspace | emitted when a workspace is destroyed | `WORKSPACENAME` |
2022-08-26 16:06:00 +02:00
| moveworkspace | emitted when a workspace is moved to a different monitor | `WORKSPACENAME,MONNAME` |
2023-09-05 15:56:19 +02:00
| renameworkspace | emitted when a workspace is renamed | `WORKSPACEID,NEWNAME` |
2023-09-04 16:45:18 +02:00
| activespecial | emitted when the special workspace opened in a monitor changes (closing results in an empty `WORKSPACENAME` ) | `WORKSPACENAME,MONNAME` |
2022-08-18 17:51:17 +02:00
| activelayout | emitted on a layout change of the active keyboard | `KEYBOARDNAME,LAYOUTNAME` |
2022-08-21 17:23:55 +02:00
| openwindow | emitted when a window is opened | `WINDOWADDRESS` ,`WORKSPACENAME`,`WINDOWCLASS`,`WINDOWTITLE` |
| closewindow | emitted when a window is closed | `WINDOWADDRESS` |
| movewindow | emitted when a window is moved to a workspace | `WINDOWADDRESS` ,`WORKSPACENAME` |
2022-10-07 23:24:46 +02:00
| openlayer | emitted when a layerSurface is mapped | `NAMESPACE` |
| closelayer | emitted when a layerSurface is unmapped | `NAMESPACE` |
2022-09-05 13:51:44 +02:00
| submap | emitted when a keybind submap changes. Empty means default. |`SUBMAPNAME` |
2022-12-09 19:52:43 +01:00
| changefloatingmode | emitted when a window changes its floating mode. `FLOATING` is either 0 or 1. | `WINDOWADDRESS` ,`FLOATING` |
2023-01-20 19:10:34 +01:00
| urgent | emitted when a window requests an `urgent` state | `WINDOWADDRESS` |
2023-01-29 17:27:19 +01:00
| minimize | emitted when a window requests a change to its minimized state. `MINIMIZED` is either 0 or 1. | `WINDOWADDRESS,MINIMIZED` |
2023-05-31 19:56:04 +02:00
| screencast | emitted when a screencopy state of a client changes. Keep in mind there might be multiple separate clients. State is 0/1, owner is 0 - monitor share, 1 - window share | `STATE,OWNER` |
2023-06-03 18:00:27 +02:00
| windowtitle | emitted when a window title changes. | `WINDOWADDRESS` |
2023-09-11 00:29:16 +02:00
| ignoregrouplock | emitted when ignoregrouplock is toggled. | `0/1` |
2022-08-18 17:22:14 +02:00
{{< hint type = warning > }}
A fullscreen event is not guaranteed to fire on/off once in succession.
2022-08-12 20:46:36 +02:00
A window might do for example 3 requests to be fullscreen'd, which would result
in 3 fullscreen events.
2022-08-18 17:22:14 +02:00
{{< / hint > }}
2022-08-12 20:46:36 +02:00
2022-10-23 16:35:39 +02:00
# How to use socket2 with bash
2022-08-12 20:46:36 +02:00
example script using socket2 events with bash and `socat` :
2022-08-13 19:06:18 +02:00
```sh
2022-08-12 20:46:36 +02:00
#!/bin/sh
2023-04-23 22:20:55 +02:00
handle() {
case $1 in
monitoradded*) do_something ;;
focusedmon*) do_something_else ;;
esac
2022-08-12 20:46:36 +02:00
}
2023-04-23 22:20:55 +02:00
socat -U - UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | while read -r line; do handle "$line"; done
2022-08-12 20:46:36 +02:00
```