feat: add Qubes Video Companion formula

Fixes: https://github.com/ben-grande/qusal/issues/49
This commit is contained in:
Ben Grande 2024-05-30 16:04:45 +02:00
parent c2db142f2d
commit 0c9b173e2c
No known key found for this signature in database
GPG Key ID: 00C64E14F51F9E56
11 changed files with 224 additions and 0 deletions

View File

@ -0,0 +1,73 @@
# video-companion
Stream webcams and share screens in Qubes OS.
## Table of Contents
* [Description](#description)
* [Installation](#installation)
* [Usage](#usage)
## Description
Installation procedures to stream webcams and share screens across qubes. The
sender/server owns the screen or webcam and the receiver/client wants to
access them without compromising the domains.
## Installation
- Top:
```sh
sudo qubesctl top.enable video-companion
sudo qubesctl state.apply
sudo qubesctl top.disable video-companion
```
- State:
<!-- pkg:begin:post-install -->
```sh
sudo qubesctl state.apply video-companion.create
```
<!-- pkg:end:post-install -->
Installation on the server (sender) template:
```sh
sudo qubesctl --skip-dom0 --targets=QUBE state.apply video-companion.install-sender
```
Installation on the client (receiver) template:
```sh
sudo qubesctl --skip-dom0 --targets=QUBE state.apply video-companion.install-receiver
```
Installation for debugging on the client (receiver) template:
```sh
sudo qubesctl --skip-dom0 --targets=QUBE state.apply video-companion.install-receiver-debug
```
## Usage
The sender has the screen you want to share of the webcam you want to access.
The receiver the is client that requests access to the screen of webcam,
therefore the client is responsible to initiate the call.
On the client, to get the screen of another qube:
```sh
qubes-video-companion screenshare
```
On the client, to get the webcam of another qube:
```sh
qubes-video-companion webcam
```
On the client, if you installed the debug utilities, call cheese to access the
shared screen or webcam:
```sh
cheese
```
Refer to [upstream usage guide](https://github.com/QubesOS/video-companion?tab=readme-ov-file#usage)
for more information.

View File

@ -0,0 +1,15 @@
{#
SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
include:
- utils.tools.common.update
"{{ slsdotpath }}-dom0-installed":
pkg.installed:
- require:
- sls: utils.tools.common.update
- pkgs:
- video-companion-dom0

View File

@ -0,0 +1,10 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'dom0':
- match: nodegroup
- video-companion.create

View File

@ -0,0 +1,8 @@
# SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
## Do not modify this file, create a new policy with with a lower number in the
## file name instead. For example `30-user.policy`.
qvc.Webcam * @anyvm @tag:usbvm ask
## vim:ft=qrexecpolicy

View File

@ -0,0 +1,10 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'dom0':
- match: nodegroup
- video-companion.create

View File

@ -0,0 +1,22 @@
{#
SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
{% if grains['nodename'] != 'dom0' -%}
include:
- utils.tools.common.update
- .install-receiver
"{{ slsdotpath }}-receiver-debug-installed":
pkg.installed:
- require:
- sls: utils.tools.common.update
- install_recommends: False
- skip_suggestions: True
- pkgs:
- dunst
{% endif %}

View File

@ -0,0 +1,9 @@
{#
SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'*':
- video-companion.install-receiver-debug

View File

@ -0,0 +1,32 @@
{#
SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
{% if grains['nodename'] != 'dom0' -%}
include:
- utils.tools.common.update
"{{ slsdotpath }}-receiver-installed":
pkg.installed:
- require:
- sls: utils.tools.common.update
- install_recommends: False
- skip_suggestions: True
- pkgs:
{% if grains['os_family']|lower == 'debian' -%}
- qubes-video-companion
{% else %}
- qubes-video-companion-receiver
{% endif %}
{% if '.qubes.' not in salt['cmd.shell']('uname -r') and grains['os_family']|lower == 'debian' -%}
- v4l2loopback-dkms
{% endif %}
## Undeclared dependencies
- qubes-core-agent-passwordless-root
- dunst
- libnotify-bin
{% endif %}

View File

@ -0,0 +1,9 @@
{#
SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'*':
- video-companion.install-receiver

View File

@ -0,0 +1,27 @@
{#
SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
{% if grains['nodename'] != 'dom0' -%}
include:
- utils.tools.common.update
"{{ slsdotpath }}-sender-installed":
pkg.installed:
- require:
- sls: utils.tools.common.update
- install_recommends: False
- skip_suggestions: True
- pkgs:
{% if grains['os_family']|lower == 'debian' -%}
- qubes-video-companion
{% else %}
- qubes-video-companion-sender
{% endif %}
## Undeclared dependencies
- dunst
{% endif %}

View File

@ -0,0 +1,9 @@
{#
SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'*':
- video-companion.install-sender