summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Reimer <manuel.reimer@gmx.de>2015-01-08 20:56:16 +0100
committerManuel Reimer <manuel.reimer@gmx.de>2015-01-08 20:56:16 +0100
commita5d3393415b6755dad1b578d0d95542f5aafb772 (patch)
treeadee235c9c5b4b7f2bdc7ef56c9cc99b9eccb45d
parent7d5ec0b3b26d89e9cea27c949b06e14036ebebf8 (diff)
downloadvdrpbd-a5d3393415b6755dad1b578d0d95542f5aafb772.tar.gz
vdrpbd-a5d3393415b6755dad1b578d0d95542f5aafb772.tar.bz2
Request exclusive access to device to keep X server out
- Fixes problem with current softhddevice versions which pass keyboard events to VDR
-rwxr-xr-xvdrpbd8
1 files changed, 6 insertions, 2 deletions
diff --git a/vdrpbd b/vdrpbd
index c46c19a..60fc907 100755
--- a/vdrpbd
+++ b/vdrpbd
@@ -1,6 +1,6 @@
#!/usr/bin/perl
# vdrpbd - A daemon to handle ACPI power button event on VDR systems
-# Copyright (C) 2013 Manuel Reimer <manuel.reimer@gmx.de>
+# Copyright (C) 2015 Manuel Reimer <manuel.reimer@gmx.de>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@ use Sys::Syslog qw(:standard :macros);
use Fcntl qw(LOCK_EX LOCK_NB LOCK_UN);
use Socket;
use FileHandle;
-use constant { EV_KEY => 1, KEY_POWER => 116 };
+use constant {EVIOCGRAB => 0x40044590, EV_KEY => 1, KEY_POWER => 116};
my $HAVE_DBUS = eval {require Net::DBus;};
my $VERSION = '0.1.0';
@@ -75,6 +75,9 @@ my $KEYQUEUE = Thread::Queue->new();
my $device = GetButtonDevice();
open(my $fhdev, '<', $device) or die("Failed to open $device\n");
+ # Get exclusive access to power button device (Disconnect X server)
+ ioctl($fhdev, EVIOCGRAB, 1) or warn("Failed to get exclusive access!\n");
+
# Register with systemd if needed/possible
SystemdInhibit() if ($HAVE_DBUS && HaveSystemd());
@@ -216,6 +219,7 @@ sub SendSVDRP {
warn("svdrp: $!");
return;
}
+ close($sh);
# Process messages returned by VDR
foreach my $msg (@reply) {