hyprland-wiki/pages/Configuring/Monitors.md

254 lines
6.6 KiB
Markdown
Raw Permalink Normal View History

---
weight: 4
title: Monitors
---
2022-09-24 15:32:40 +02:00
## General
2022-09-24 15:32:40 +02:00
The general config of a monitor looks like this:
2022-09-24 16:03:37 +02:00
```ini
2024-07-30 21:59:15 +02:00
monitor = name, resolution, position, scale
2022-09-24 15:32:40 +02:00
```
A common example:
2022-09-24 16:03:37 +02:00
```ini
2024-07-30 21:59:15 +02:00
monitor = DP-1, 1920x1080@144, 0x0, 1
2022-09-24 15:32:40 +02:00
```
This will make the monitor on `DP-1` a `1920x1080` display, at
144Hz, `0x0` off from the top left corner, with a scale of 1 (unscaled).
2022-09-24 15:32:40 +02:00
To list all available monitors (active and inactive):
2024-07-30 21:59:15 +02:00
```bash
hyprctl monitors all
```
2024-07-30 21:59:15 +02:00
Monitors are positioned on a virtual "layout". The `position` is the position,
in pixels, of said display in the layout. (calculated from the top-left corner)
2022-11-05 17:47:33 +01:00
For example:
2022-11-05 17:47:33 +01:00
```ini
2024-07-30 21:59:15 +02:00
monitor = DP-1, 1920x1080, 0x0, 1
monitor = DP-2, 1920x1080, 1920x0, 1
2022-11-05 17:47:33 +01:00
```
2024-07-30 21:59:15 +02:00
will tell Hyprland to put DP-1 on the _left_ of DP-2, while
2022-11-05 17:47:33 +01:00
```ini
2024-07-30 21:59:15 +02:00
monitor = DP-1, 1920x1080, 1920x0, 1
monitor = DP-2, 1920x1080, 0x0, 1
2022-11-05 17:47:33 +01:00
```
2024-07-30 21:59:15 +02:00
will tell Hyprland to put DP-1 on the _right_.
2022-11-05 17:47:33 +01:00
The `position` may contain _negative_ values, so the above example could also be
written as
```ini
2024-07-30 21:59:15 +02:00
monitor = DP-1, 1920x1080, 0x0, 1
monitor = DP-2, 1920x1080, -1920x0, 1
```
Hyprland uses an inverse Y cartesian system. Thus, a negative y coordinate
places a monitor higher, and a positive y coordinate will place it lower.
For example:
```ini
2024-07-30 21:59:15 +02:00
monitor = DP-1, 1920x1080, 0x0, 1
monitor = DP-2, 1920x1080, 0x-1080, 1
```
2024-07-30 21:59:15 +02:00
will tell Hyprland to put DP-2 _above_ DP-1, while
```ini
2024-07-30 21:59:15 +02:00
monitor = DP-1, 1920x1080, 0x0, 1
monitor = DP-2, 1920x1080, 0x1080, 1
```
2024-07-30 21:59:15 +02:00
will tell Hyprland to put DP-2 _below_.
{{< callout type=info >}}
2022-09-24 15:32:40 +02:00
The position is calculated with the scaled (and transformed) resolution, meaning
if you want your 4K monitor with scale 2 to the left of your 1080p one, you'd
use the position `1920x0` for the second screen (3840 / 2). If the monitor is
also rotated 90 degrees (vertical), you'd use `1080x0`.
2022-09-24 15:32:40 +02:00
{{</ callout >}}
2022-09-24 15:32:40 +02:00
Leaving the name empty will define a fallback rule to use when no other rules
match.
2024-07-30 21:59:15 +02:00
There are a few special values for the resolutions:
2024-11-06 19:34:37 +01:00
2024-07-30 21:59:15 +02:00
- `preferred` - use the display's preferred size and refresh rate.
- `highres` - use the highest supported resolution.
- `highrr` - use the highest supported refresh rate.
Position also has a few special values:
2024-11-06 19:34:37 +01:00
2024-07-30 21:59:15 +02:00
- `auto` - let Hyprland decide on a position. By default, it places each new monitor to the right of existing ones.
- `auto-right/left/up/down` - place the monitor to the right/left, above or below other monitors.
2024-11-06 19:34:37 +01:00
_**Please Note:**_ While specifying a monitor direction for your first monitor is allowed, this does nothing and it will
2024-04-23 02:40:10 +02:00
be positioned at (0,0). Also the direction is always from the center out, so you can specify `auto-up` then `auto-left`,
but the left monitors will just be left of the origin and above the origin. You can also specify duplicate directions and
monitors will continue to go in that direction.
2022-09-24 15:32:40 +02:00
You can also use `auto` as a scale to let Hyprland decide on a scale for you.
These depend on the PPI of the monitor.
2022-12-14 18:58:35 +01:00
2022-09-24 15:32:40 +02:00
Recommended rule for quickly plugging in random monitors:
2022-09-24 16:03:37 +02:00
```ini
2024-07-30 21:59:15 +02:00
monitor = , preferred, auto, 1
2022-09-24 15:32:40 +02:00
```
2024-07-30 21:59:15 +02:00
This will make any monitor that was not specified with an explicit rule
automatically placed on the right of the other(s), with its preferred
resolution.
2022-09-24 15:32:40 +02:00
For more specific rules, you can also use the output's description (see
`hyprctl monitors` for more details). If the output of `hyprctl monitors` looks
like the following:
2024-07-30 21:59:15 +02:00
```yaml
Monitor eDP-1 (ID 0):
1920x1080@60.00100 at 0x0
description: Chimei Innolux Corporation 0x150C (eDP-1)
make: Chimei Innolux Corporation
model: 0x150C
[...]
```
2024-07-30 21:59:15 +02:00
then the `description` value up to, but not including the portname `(eDP-1)` can
be used to specify the monitor:
2022-10-05 11:24:22 +02:00
2024-07-30 21:59:15 +02:00
```ini
monitor = desc:Chimei Innolux Corporation 0x150C, preferred, auto, 1.5
2022-10-05 11:24:22 +02:00
```
Remember to remove the `(portname)`!
2022-10-27 15:49:50 +02:00
### Custom modelines
2023-09-02 20:21:00 +02:00
You can set up a custom modeline by changing the resolution field to a modeline,
for example:
2023-09-02 20:21:00 +02:00
2024-07-30 21:59:15 +02:00
```ini
2023-09-02 20:21:00 +02:00
monitor = DP-1, modeline 1071.101 3840 3848 3880 3920 2160 2263 2271 2277 +hsync -vsync, 0x0, 1
```
### Disabling a monitor
2022-09-24 15:32:40 +02:00
To disable a monitor, use
2022-09-24 16:03:37 +02:00
```ini
2024-07-30 21:59:15 +02:00
monitor = name, disable
2022-09-24 15:32:40 +02:00
```
{{< callout >}}
2022-11-23 11:07:51 +01:00
Disabling a monitor will literally remove it from the layout, moving all windows
and workspaces to any remaining ones. If you want to disable your monitor in a
screensaver style (just turn off the monitor) use the `dpms`
2024-03-17 13:44:39 +01:00
[dispatcher](../Dispatchers).
2022-11-23 11:07:51 +01:00
{{</ callout >}}
2022-11-23 11:07:51 +01:00
## Custom reserved area
2022-09-24 15:32:40 +02:00
A reserved area is an area that remains unoccupied by tiled windows.
If your workflow requires a custom reserved area, you can add it with:
2022-09-24 15:32:40 +02:00
2022-09-24 16:03:37 +02:00
```ini
2024-07-30 21:59:15 +02:00
monitor = name, addreserved, TOP, BOTTOM, LEFT, RIGHT
2022-09-24 15:32:40 +02:00
```
2024-07-30 21:59:15 +02:00
Where `TOP` `BOTTOM` `LEFT` `RIGHT` are integers, i.e the number in pixels of
the reserved area to add. This does stack on top of the calculated reserved area
(e.g. bars), but you may only use one of these rules per monitor in the config.
2022-09-24 15:32:40 +02:00
## Extra args
2022-10-27 14:26:44 +02:00
You can combine extra arguments at the end of the monitor rule, examples:
```ini
2024-07-30 21:59:15 +02:00
monitor = eDP-1, 2880x1800@90, 0x0, 1, transform, 1, mirror, DP-2, bitdepth, 10
```
2024-07-30 21:59:15 +02:00
See below for more details about each argument.
### Mirrored displays
2022-09-24 15:32:40 +02:00
2024-07-30 21:59:15 +02:00
If you want to mirror a display, add a `, mirror, <NAME>` at the end of the
monitor rule, examples:
2022-09-24 16:03:37 +02:00
```ini
2024-07-30 21:59:15 +02:00
monitor = DP-3, 1920x1080@60, 0x0, 1, mirror, DP-2
monitor = , preferred, auto, 1, mirror, DP-1
2022-09-24 15:32:40 +02:00
```
Please remember that mirroring displays will not "re-render" everything for your
2022-09-24 16:37:22 +02:00
second monitor, so if mirroring a 1080p screen onto a 4K one, the resolution
will still be 1080p on the 4K display. This also means squishing and stretching
2024-07-30 21:59:15 +02:00
will occur on aspect ratios that differ (e.g 16:9 and 16:10).
2022-09-24 15:32:40 +02:00
### 10 bit support
2024-07-30 21:59:15 +02:00
If you want to enable 10 bit support for your display, add a `, bitdepth, 10` at
the end of the monitor rule, e.g:
2022-10-27 14:26:44 +02:00
```ini
2024-07-30 21:59:15 +02:00
monitor = eDP-1, 2880x1800@90, 0x0, 1, bitdepth, 10
2022-10-27 14:26:44 +02:00
```
2024-07-30 21:59:15 +02:00
{{< callout >}}
Colors registered in Hyprland (e.g. the border color) do _not_ support
10 bit.
2022-10-27 14:26:44 +02:00
2024-07-30 21:59:15 +02:00
Some applications do _not_ support screen capture with 10 bit enabled.
{{< /callout >}}
2022-10-27 14:26:44 +02:00
### VRR
2024-07-30 21:59:15 +02:00
Per-display VRR can be done by adding `, vrr, X` where `X` is the mode from the
2024-03-17 13:44:39 +01:00
[variables page](../Variables).
2023-09-02 20:28:08 +02:00
## Rotating
2023-09-02 20:28:08 +02:00
2024-07-30 21:59:15 +02:00
If you want to rotate a monitor, add a `, transform, X` at the end of the monitor
rule, where `X` corresponds to a transform number, e.g.:
2022-09-24 15:32:40 +02:00
2022-11-21 14:46:56 +01:00
```ini
2024-07-30 21:59:15 +02:00
monitor = eDP-1, 2880x1800@90, 0x0, 1, transform, 1
2022-11-21 14:46:56 +01:00
```
2023-03-18 17:16:18 +01:00
Transform list:
2024-11-06 19:34:37 +01:00
```plain
0 -> normal (no transforms)
1 -> 90 degrees
2 -> 180 degrees
3 -> 270 degrees
4 -> flipped
5 -> flipped + 90 degrees
6 -> flipped + 180 degrees
7 -> flipped + 270 degrees
2022-09-24 15:32:40 +02:00
```
## Default workspace
2022-09-24 15:32:40 +02:00
2024-03-17 13:44:39 +01:00
See [Workspace Rules](../Workspace-Rules).
2023-03-24 22:14:35 +01:00
### Binding workspaces to a monitor
2024-03-17 13:44:39 +01:00
See [Workspace Rules](../Workspace-Rules).