autorotate: apply patch to check rotation at startup and fork
penmon: initial patch to support devices autodetection autorotate: disable session autostart (done in sddm Xsetup) [release 20180914git-2mamba;Sat Sep 15 2018]
This commit is contained in:
parent
df0d774d32
commit
4bfa5f1674
@ -1,2 +1,4 @@
|
|||||||
# surface-tools
|
# surface-tools
|
||||||
|
|
||||||
|
Tools for using the Microsoft Surface with Linux.
|
||||||
|
|
||||||
|
9
autorotate.desktop
Normal file
9
autorotate.desktop
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
Name=autorotate
|
||||||
|
Exec=/usr/share/autorotate/autorotate
|
||||||
|
Icon=/usr/share/autorotate/rotate.png
|
||||||
|
Type=Application
|
||||||
|
Comment=Automatic display rotation
|
||||||
|
Comment[it]=Rotazione automatica dello schermo
|
||||||
|
X-KDE-autostart-phase=1
|
67
surface-tools-20180914git-autorotate-autodetect.patch
Normal file
67
surface-tools-20180914git-autorotate-autodetect.patch
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
diff -Nru surface-tools-20180914git.orig/autorotate/autorotate surface-tools-20180914git/autorotate/autorotate
|
||||||
|
--- surface-tools-20180914git.orig/autorotate/autorotate 2018-09-14 10:02:55.000000000 +0200
|
||||||
|
+++ surface-tools-20180914git/autorotate/autorotate 2018-09-14 10:29:23.835658053 +0200
|
||||||
|
@@ -1,9 +1,9 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
#####CONFIGURATION#####
|
||||||
|
-sensorname="accel_3d"
|
||||||
|
+#sensorname="accel_3d"
|
||||||
|
|
||||||
|
-screenname="eDP1"
|
||||||
|
+#screenname="eDP1"
|
||||||
|
|
||||||
|
#####PROGRAM CODE#####
|
||||||
|
#Do not change unless you know what you are doing!
|
||||||
|
@@ -30,6 +30,8 @@
|
||||||
|
import subprocess
|
||||||
|
import os.path
|
||||||
|
import signal
|
||||||
|
+import gi
|
||||||
|
+gi.require_version('Gtk', '3.0')
|
||||||
|
from gi.repository import Gtk, GdkPixbuf, GObject
|
||||||
|
|
||||||
|
hasAppIndicator = True
|
||||||
|
@@ -38,6 +40,12 @@
|
||||||
|
except:
|
||||||
|
hasAppIndicator = False
|
||||||
|
|
||||||
|
+def run_shell_cmd(cmd):
|
||||||
|
+ """runs a shell commands and returns the string generated by the command."""
|
||||||
|
+ p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
|
||||||
|
+ out = p.stdout.read().strip()
|
||||||
|
+ return out #This is the stdout from the shell command
|
||||||
|
+
|
||||||
|
def twos_comp(val):
|
||||||
|
if val & (1 << (16-1)) != 0:
|
||||||
|
val = val - (1 << 16)
|
||||||
|
@@ -91,9 +99,28 @@
|
||||||
|
GObject.timeout_add(1000, checkRotation)
|
||||||
|
|
||||||
|
context = pyudev.Context()
|
||||||
|
-for device in context.list_devices(subsystem="iio").match_attribute("name", sensorname): break
|
||||||
|
+
|
||||||
|
+try:
|
||||||
|
+ for device in context.list_devices(subsystem="iio").match_attribute("name", sensorname): break
|
||||||
|
+except:
|
||||||
|
+ for device in context.list_devices(subsystem="iio"): break
|
||||||
|
assert device
|
||||||
|
|
||||||
|
+"""Find which output to rotate, and get its current rotation"""
|
||||||
|
+# Cache the xrandr info as we'll use it several times
|
||||||
|
+XRANDR_INFO = run_shell_cmd('xrandr --verbose')
|
||||||
|
+
|
||||||
|
+# Find the display we are interested to move (= the laptop panel)
|
||||||
|
+POSSIBLE_OUTPUT = [ "DSI1", "eDP1", "LVDS", "LVDS1" ]
|
||||||
|
+for out in POSSIBLE_OUTPUT:
|
||||||
|
+ match = re.search("^" + out + r" connected .* \(.*\) (?P<rotation>.*) \(",
|
||||||
|
+ XRANDR_INFO,
|
||||||
|
+ re.MULTILINE
|
||||||
|
+ )
|
||||||
|
+ if match:
|
||||||
|
+ screenname = out
|
||||||
|
+ break
|
||||||
|
+
|
||||||
|
path = device.device_path
|
||||||
|
|
||||||
|
prevorientation = ""
|
17
surface-tools-20180914git-check-and-fork.patch
Normal file
17
surface-tools-20180914git-check-and-fork.patch
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
diff -Nru surface-tools-20180914git.orig/autorotate/autorotate surface-tools-20180914git/autorotate/autorotate
|
||||||
|
--- surface-tools-20180914git.orig/autorotate/autorotate 2018-09-14 10:58:53.959407234 +0200
|
||||||
|
+++ surface-tools-20180914git/autorotate/autorotate 2018-09-15 12:58:25.572548316 +0200
|
||||||
|
@@ -163,5 +163,11 @@
|
||||||
|
# https://bugzilla.gnome.org/show_bug.cgi?id=622084#c12
|
||||||
|
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||||
|
|
||||||
|
- GObject.idle_add(checkRotation)
|
||||||
|
- Gtk.main()
|
||||||
|
+ newRef=os.fork()
|
||||||
|
+ if newRef==0:
|
||||||
|
+ GObject.idle_add(checkRotation)
|
||||||
|
+ Gtk.main()
|
||||||
|
+ else:
|
||||||
|
+ checkRotation()
|
||||||
|
+
|
||||||
|
+
|
37
surface-tools-20180914git-penmon-autodetect.patch
Normal file
37
surface-tools-20180914git-penmon-autodetect.patch
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
diff -Nru surface-tools-20180914git.orig/penmon/penmon surface-tools-20180914git/penmon/penmon
|
||||||
|
--- surface-tools-20180914git.orig/penmon/penmon 2018-09-14 10:02:55.000000000 +0200
|
||||||
|
+++ surface-tools-20180914git/penmon/penmon 2018-09-15 13:25:03.688691667 +0200
|
||||||
|
@@ -3,7 +3,8 @@
|
||||||
|
#####CONFIGURATION#####
|
||||||
|
screen="eDP1"
|
||||||
|
inputnames=[
|
||||||
|
- "NTRG0001:01 1B96:1B05 Pen"
|
||||||
|
+ "NTRG0001:01 1B96:1B05 Pen",
|
||||||
|
+ "TOUCHPAD"
|
||||||
|
]
|
||||||
|
|
||||||
|
#####PROGRAM CODE#####
|
||||||
|
@@ -23,10 +24,22 @@
|
||||||
|
state = subprocess.check_output([xrandr, "-q"])
|
||||||
|
if state != oldstate:
|
||||||
|
for input_ in inputnames:
|
||||||
|
- pattern = re.compile(input_ + " *\tid=([0-9]+)\t")
|
||||||
|
+ pattern = re.compile(".*" + input_ + ".* *\tid=([0-9]+)\t.* pointer .*")
|
||||||
|
output = subprocess.check_output([xinput, "list"]).decode("unicode_escape")
|
||||||
|
matches = re.findall(pattern, output)
|
||||||
|
|
||||||
|
+ # Find the display we are interested to move (= the laptop panel)
|
||||||
|
+ POSSIBLE_OUTPUT = [ "DSI1", "eDP1", "LVDS", "LVDS1" ]
|
||||||
|
+ for out in POSSIBLE_OUTPUT:
|
||||||
|
+ match = re.search("^" + out + r" connected .* \(.*\) (?P<rotation>.*) .*",
|
||||||
|
+ state,
|
||||||
|
+ re.MULTILINE
|
||||||
|
+ )
|
||||||
|
+ if match:
|
||||||
|
+ screen = out
|
||||||
|
+ break
|
||||||
|
+
|
||||||
|
for id in matches:
|
||||||
|
subprocess.call([xinput, "map-to-output", id, screen])
|
||||||
|
+
|
||||||
|
sleep(1)
|
68
surface-tools.spec
Normal file
68
surface-tools.spec
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
Name: surface-tools
|
||||||
|
Version: 20180914git
|
||||||
|
Release: 2mamba
|
||||||
|
Summary: Tools for using the Microsoft Surface with Linux
|
||||||
|
Group: System/Kernel and Hardware
|
||||||
|
Vendor: openmamba
|
||||||
|
Distribution: openmamba
|
||||||
|
Packager: Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
URL: https://github.com/Surface-Pro-3/surface-tools
|
||||||
|
## GITSOURCE https://github.com/Surface-Pro-3/surface-tools.git master
|
||||||
|
Source: https://github.com/Surface-Pro-3/surface-tools.git/master/surface-tools-%{version}.tar.bz2
|
||||||
|
Source1: autorotate.desktop
|
||||||
|
Patch0: surface-tools-20180914git-autorotate-autodetect.patch
|
||||||
|
Patch1: surface-tools-20180914git-check-and-fork.patch
|
||||||
|
Patch2: surface-tools-20180914git-penmon-autodetect.patch
|
||||||
|
License: GPL
|
||||||
|
## AUTOBUILDREQ-BEGIN
|
||||||
|
## AUTOBUILDREQ-END
|
||||||
|
Requires: pyudev
|
||||||
|
Requires: pygobject
|
||||||
|
Requires: xrandr
|
||||||
|
Requires: xinput
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
||||||
|
|
||||||
|
%description
|
||||||
|
Tools for using the Microsoft Surface with Linux.
|
||||||
|
|
||||||
|
%debug_package
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
%patch0 -p1
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
%install
|
||||||
|
[ "%{buildroot}" != / ] && rm -rf "%{buildroot}"
|
||||||
|
install -d %{buildroot}%{_datadir}/autorotate
|
||||||
|
cp autorotate/*.png %{buildroot}%{_datadir}/autorotate
|
||||||
|
cp autorotate/autorotate %{buildroot}%{_datadir}/autorotate/
|
||||||
|
|
||||||
|
#install -D -m0644 %{SOURCE1} %{buildroot}%{_sysconfdir}/xdg/autostart/autorotate.desktop
|
||||||
|
|
||||||
|
install -D -m0755 penmon/penmon %{buildroot}%{_datadir}/penmon/penmon
|
||||||
|
|
||||||
|
%clean
|
||||||
|
[ "%{buildroot}" != / ] && rm -rf "%{buildroot}"
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root)
|
||||||
|
#%{_sysconfdir}/xdg/autostart/autorotate.desktop
|
||||||
|
%dir %{_datadir}/autorotate
|
||||||
|
%{_datadir}/autorotate/*.png
|
||||||
|
%{_datadir}/autorotate/autorotate
|
||||||
|
%dir %{_datadir}/penmon
|
||||||
|
%{_datadir}/penmon/penmon
|
||||||
|
%doc LICENSE
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Sat Sep 15 2018 Silvan Calarco <silvan.calarco@mambasoft.it> 20180914git-2mamba
|
||||||
|
- autorotate: apply patch to check rotation at startup and fork
|
||||||
|
- penmon: initial patch to support devices autodetection
|
||||||
|
- autorotate: disable session autostart (done in sddm Xsetup)
|
||||||
|
|
||||||
|
* Fri Sep 14 2018 Silvan Calarco <silvan.calarco@mambasoft.it> 20180914git-1mamba
|
||||||
|
- package created using the webbuild interface
|
Loading…
Reference in New Issue
Block a user