diff --git a/salt/video-companion/README.md b/salt/video-companion/README.md new file mode 100644 index 0000000..9c1cd9d --- /dev/null +++ b/salt/video-companion/README.md @@ -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: + +```sh +sudo qubesctl state.apply video-companion.create +``` + + + +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. diff --git a/salt/video-companion/create.sls b/salt/video-companion/create.sls new file mode 100644 index 0000000..119b295 --- /dev/null +++ b/salt/video-companion/create.sls @@ -0,0 +1,15 @@ +{# +SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. + +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 diff --git a/salt/video-companion/create.top b/salt/video-companion/create.top new file mode 100644 index 0000000..35acaed --- /dev/null +++ b/salt/video-companion/create.top @@ -0,0 +1,10 @@ +{# +SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. + +SPDX-License-Identifier: AGPL-3.0-or-later +#} + +base: + 'dom0': + - match: nodegroup + - video-companion.create diff --git a/salt/video-companion/files/admin/policy/default.policy b/salt/video-companion/files/admin/policy/default.policy new file mode 100644 index 0000000..87024e8 --- /dev/null +++ b/salt/video-companion/files/admin/policy/default.policy @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. +# +# 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 diff --git a/salt/video-companion/init.top b/salt/video-companion/init.top new file mode 100644 index 0000000..35acaed --- /dev/null +++ b/salt/video-companion/init.top @@ -0,0 +1,10 @@ +{# +SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. + +SPDX-License-Identifier: AGPL-3.0-or-later +#} + +base: + 'dom0': + - match: nodegroup + - video-companion.create diff --git a/salt/video-companion/install-receiver-debug.sls b/salt/video-companion/install-receiver-debug.sls new file mode 100644 index 0000000..5a77fc1 --- /dev/null +++ b/salt/video-companion/install-receiver-debug.sls @@ -0,0 +1,22 @@ +{# +SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. + +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 %} diff --git a/salt/video-companion/install-receiver-debug.top b/salt/video-companion/install-receiver-debug.top new file mode 100644 index 0000000..15edd37 --- /dev/null +++ b/salt/video-companion/install-receiver-debug.top @@ -0,0 +1,9 @@ +{# +SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. + +SPDX-License-Identifier: AGPL-3.0-or-later +#} + +base: + '*': + - video-companion.install-receiver-debug diff --git a/salt/video-companion/install-receiver.sls b/salt/video-companion/install-receiver.sls new file mode 100644 index 0000000..6abd4c0 --- /dev/null +++ b/salt/video-companion/install-receiver.sls @@ -0,0 +1,32 @@ +{# +SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. + +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 %} diff --git a/salt/video-companion/install-receiver.top b/salt/video-companion/install-receiver.top new file mode 100644 index 0000000..3ac6521 --- /dev/null +++ b/salt/video-companion/install-receiver.top @@ -0,0 +1,9 @@ +{# +SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. + +SPDX-License-Identifier: AGPL-3.0-or-later +#} + +base: + '*': + - video-companion.install-receiver diff --git a/salt/video-companion/install-sender.sls b/salt/video-companion/install-sender.sls new file mode 100644 index 0000000..cd7c47e --- /dev/null +++ b/salt/video-companion/install-sender.sls @@ -0,0 +1,27 @@ +{# +SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. + +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 %} diff --git a/salt/video-companion/install-sender.top b/salt/video-companion/install-sender.top new file mode 100644 index 0000000..8a2336c --- /dev/null +++ b/salt/video-companion/install-sender.top @@ -0,0 +1,9 @@ +{# +SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. + +SPDX-License-Identifier: AGPL-3.0-or-later +#} + +base: + '*': + - video-companion.install-sender