Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions debian/qubes-input-proxy-sender.install
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@
/usr/lib/systemd/system/qubes-input-sender-mouse@.service
/usr/lib/systemd/system/qubes-input-sender-keyboard@.service
/usr/lib/systemd/system/qubes-input-sender-keyboard-mouse@.service
/usr/lib/qubes/input-proxy-arg
2 changes: 2 additions & 0 deletions qubes-rpc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ install-vm:
$(DESTDIR)$(USRLIBDIR)/udev/rules.d/90-qubes-uinput.rules
install -m 0644 -D qubes-uinput.modules \
$(DESTDIR)$(USRLIBDIR)/modules-load.d/qubes-uinput.conf
install -m 0755 -D input-proxy-arg \
$(DESTDIR)$(USRLIBDIR)/qubes/input-proxy-arg
install -d $(DESTDIR)/etc/qubes-rpc
install qubes.InputMouse $(DESTDIR)/etc/qubes-rpc
install qubes.InputKeyboard $(DESTDIR)/etc/qubes-rpc
Expand Down
29 changes: 29 additions & 0 deletions qubes-rpc/input-proxy-arg
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash

dev="$1"
output="$2"

sysfs_path="/sys/class/input/${dev##*/}/device/uevent"

[ -e "$sysfs_path" ] || exit
product="$(grep ^PRODUCT= "$sysfs_path")"
[ -n "$product" ] || exit
product="${product#*=}"
product="${product//\"/}"
product="${product//\//-}"

port="$(grep ^PHYS= "$sysfs_path")"
# by default include also physical port (if known), but allow opt-out
if [ -n "$port" ] && ! [ -e /run/qubes-service/input-proxy-exclude-port ]; then
port="${port#*=}"
port="${port//\"/}"
port="${port%/*}"
port="${port//:/_}"
# separate port from device with '+'
port="${port}+"
else
port=
fi

mkdir -p "${output%/*}"
echo "QREXEC_ARG=+$port$product" > "$output"
6 changes: 5 additions & 1 deletion qubes-rpc/qubes-input-sender-keyboard-mouse@.service
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@ OnFailure=qubes-input-sender-mouse@%i.service
[Service]
Environment=TARGET_DOMAIN=dom0
EnvironmentFile=-/etc/qubes/input-proxy-target
ExecStart=/usr/bin/qubes-input-sender qubes.InputKeyboard /dev/input/%i "$TARGET_DOMAIN"
EnvironmentFile=-%t/qubes-input-proxy-env/%i
ExecStartPre=/usr/lib/qubes/input-proxy-arg /dev/input/%i %t/qubes-input-proxy-env/%i
ExecStart=/usr/bin/qubes-input-sender qubes.InputKeyboard${QREXEC_ARG} /dev/input/%i "$TARGET_DOMAIN"
ExecStopPost=/bin/rm -f %t/qubes-input-proxy-env/%i
PrivateTmp=yes
6 changes: 5 additions & 1 deletion qubes-rpc/qubes-input-sender-keyboard@.service
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,8 @@ After=qubes-qrexec-agent.service
[Service]
Environment=TARGET_DOMAIN=dom0
EnvironmentFile=-/etc/qubes/input-proxy-target
ExecStart=/usr/bin/qubes-input-sender qubes.InputKeyboard /dev/input/%i "$TARGET_DOMAIN"
EnvironmentFile=-%t/qubes-input-proxy-env/%i
ExecStartPre=/usr/lib/qubes/input-proxy-arg /dev/input/%i %t/qubes-input-proxy-env/%i
ExecStart=/usr/bin/qubes-input-sender qubes.InputKeyboard${QREXEC_ARG} /dev/input/%i "$TARGET_DOMAIN"
ExecStopPost=/bin/rm -f %t/qubes-input-proxy-env/%i
PrivateTmp=yes
6 changes: 5 additions & 1 deletion qubes-rpc/qubes-input-sender-mouse@.service
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,8 @@ After=qubes-qrexec-agent.service
[Service]
Environment=TARGET_DOMAIN=dom0
EnvironmentFile=-/etc/qubes/input-proxy-target
ExecStart=/usr/bin/qubes-input-sender qubes.InputMouse /dev/input/%i "$TARGET_DOMAIN"
EnvironmentFile=-%t/qubes-input-proxy-env/%i
ExecStartPre=/usr/lib/qubes/input-proxy-arg /dev/input/%i %t/qubes-input-proxy-env/%i
ExecStart=/usr/bin/qubes-input-sender qubes.InputMouse${QREXEC_ARG} /dev/input/%i "$TARGET_DOMAIN"
ExecStopPost=/bin/rm -f %t/qubes-input-proxy-env/%i
PrivateTmp=yes
6 changes: 5 additions & 1 deletion qubes-rpc/qubes-input-sender-tablet@.service
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,8 @@ After=qubes-qrexec-agent.service
[Service]
Environment=TARGET_DOMAIN=dom0
EnvironmentFile=-/etc/qubes/input-proxy-target
ExecStart=/usr/bin/qubes-input-sender qubes.InputTablet /dev/input/%i "$TARGET_DOMAIN"
EnvironmentFile=-%t/qubes-input-proxy-env/%i
ExecStartPre=/usr/lib/qubes/input-proxy-arg /dev/input/%i %t/qubes-input-proxy-env/%i
ExecStart=/usr/bin/qubes-input-sender qubes.InputTablet${QREXEC_ARG} /dev/input/%i "$TARGET_DOMAIN"
ExecStopPost=/bin/rm -f %t/qubes-input-proxy-env/%i
PrivateTmp=yes
1 change: 1 addition & 0 deletions rpm_spec/input-proxy.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ rm -rf %{buildroot}/etc/qubes-rpc/policy
/usr/bin/qubes-input-trigger
%config(noreplace) /etc/xdg/autostart/qubes-input-trigger.desktop
/usr/lib/udev/rules.d/90-qubes-input-proxy.rules
/usr/lib/qubes/input-proxy-arg
%{_unitdir}/qubes-input-sender-tablet@.service
%{_unitdir}/qubes-input-sender-mouse@.service
%{_unitdir}/qubes-input-sender-keyboard@.service
Expand Down