From: Don Armstrong Date: Sat, 17 Aug 2019 04:15:40 +0000 (-0700) Subject: New upstream version 1.8.1 X-Git-Tag: upstream/1.8.1 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=refs%2Ftags%2Fupstream%2F1.8.1;hp=fa11792a11656d1af050b38004c0f9bd28478c77;p=deb_pkgs%2Fautorandr.git New upstream version 1.8.1 --- diff --git a/Makefile b/Makefile index d8b27c6..fd35f6a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ DESTDIR=/ PREFIX=/usr/ -RPM_SPEC=contrib/packaging/rpm/autorandr.spec .PHONY: all install uninstall autorandr bash_completion autostart_config pmutils systemd udev @@ -152,7 +151,3 @@ uninstall: $(patsubst %,uninstall_%,$(TARGETS)) deb: ./contrib/packaging/debian/make_deb.sh - -rpm: - spectool -g -R $(RPM_SPEC) - rpmbuild -ba $(RPM_SPEC) diff --git a/README.md b/README.md index bf81fa4..7268f6d 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,6 @@ you can for various distributions (RPM and DEB based). * Use the [X binary package system](https://wiki.voidlinux.eu/XBPS)' on Void Linux * Build a .deb-file from the source tree using `make deb`. -* Build a .rpm-file from the source tree using `make rpm`. We appreciate packaging scripts for other distributions, please file a pull request if you write one. @@ -213,10 +212,6 @@ profiles matching multiple (or any) monitors. ## Changelog -**autorandr 1.9 (dev)** - -* *2019-03-24* Fix handling of recently disconnected outputs (See #128 and #143) - **autorandr 1.8.1** * *2019-03-18* Removed mandb call from Makefile diff --git a/autorandr.py b/autorandr.py index cc1a25a..cf9b0c8 100755 --- a/autorandr.py +++ b/autorandr.py @@ -161,7 +161,6 @@ class XrandrOutput(object): (?:[\ \t]*border\ (?P(?:[0-9]+/){3}[0-9]+))? # Border information (?:\s*(?: # Properties of the output Gamma: (?P(?:inf|[0-9\.: e])+) | # Gamma value - CRTC:\s*(?P[0-9]) | # CRTC value Transform: (?P(?:[\-0-9\. ]+\s+){3}) | # Transformation matrix EDID: (?P\s*?(?:\\n\\t\\t[0-9a-f]+)+) | # EDID of the output (?![0-9])[^:\s][^:\n]+:.*(?:\s\\t[\\t ].+)* # Other properties @@ -318,13 +317,7 @@ class XrandrOutput(object): else: edid = "%s-%s" % (XrandrOutput.EDID_UNAVAILABLE, match["output"]) - # An output can be disconnected but still have a mode configured. This can only happen - # as a residual situation after a disconnect, you cannot associate a mode with an disconnected - # output. - # - # This code needs to be careful not to mix the two. An output should only be configured to - # "off" if it doesn't have a mode associated with it, which is modelled as "not a width" here. - if not match["width"]: + if not match["connected"] or not match["width"]: options["off"] = None else: if match["mode_name"]: @@ -333,11 +326,10 @@ class XrandrOutput(object): options["mode"] = "%sx%s" % (match["mode_width"], match["mode_height"]) else: if match["rotate"] not in ("left", "right"): - options["mode"] = "%sx%s" % (match["width"] or 0, match["height"] or 0) + options["mode"] = "%sx%s" % (match["width"], match["height"]) else: - options["mode"] = "%sx%s" % (match["height"] or 0, match["width"] or 0) - if match["rotate"]: - options["rotate"] = match["rotate"] + options["mode"] = "%sx%s" % (match["height"], match["width"]) + options["rotate"] = match["rotate"] if match["primary"]: options["primary"] = None if match["reflect"] == "X": @@ -371,8 +363,6 @@ class XrandrOutput(object): # so we approximate by 1e-10. gamma = ":".join([str(max(1e-10, round(1. / float(x), 3))) for x in gamma.split(":")]) options["gamma"] = gamma - if match["crtc"]: - options["crtc"] = match["crtc"] if match["rate"]: options["rate"] = match["rate"] @@ -582,17 +572,6 @@ def profile_blocked(profile_path, meta_information=None): return not exec_scripts(profile_path, "block", meta_information) -def check_configuration_pre_save(configuration): - "Check that a configuration is safe for saving." - outputs = sorted(configuration.keys(), key=lambda x: configuration[x].sort_key) - for output in outputs: - if "off" not in configuration[output].options and not configuration[output].edid: - return ("`%(o)s' is not off (has a mode configured) but is disconnected (does not have an EDID).\n" - "This typically means that it has been recently unplugged and then not properly disabled\n" - "by the user. Please disable it (e.g. using `xrandr --output %(o)s --off`) and then rerun\n" - "this command.") % {"o": output} - - def output_configuration(configuration, config): "Write a configuration file" outputs = sorted(configuration.keys(), key=lambda x: configuration[x].sort_key) @@ -660,10 +639,7 @@ def get_fb_dimensions(configuration): if "off" in output.options or not output.edid: continue # This won't work with all modes -- but it's a best effort. - match = re.search("[0-9]{3,}x[0-9]{3,}", output.options["mode"]) - if not match: - return None - o_mode = match.group(0) + o_mode = re.search("[0-9]{3,}x[0-9]{3,}", output.options["mode"]).group(0) o_width, o_height = map(int, o_mode.split("x")) if "transform" in output.options: a, b, c, d, e, f, g, h, i = map(float, output.options["transform"].split(",")) @@ -1213,11 +1189,6 @@ def main(argv): if options["--save"] in (x[0] for x in virtual_profiles): raise AutorandrException("Cannot save current configuration as profile '%s':\n" "This configuration name is a reserved virtual configuration." % options["--save"]) - error = check_configuration_pre_save(config) - if error: - print("Cannot save current configuration as profile '%s':" % options["--save"]) - print(error) - sys.exit(1) try: profile_folder = os.path.join(profile_path, options["--save"]) save_configuration(profile_folder, config) diff --git a/contrib/bash_completion/autorandr b/contrib/bash_completion/autorandr index 03beabe..e7f098c 100644 --- a/contrib/bash_completion/autorandr +++ b/contrib/bash_completion/autorandr @@ -29,9 +29,9 @@ _autorandr () AR_DIRS=( "${AR_DIRS[@]}" "${XDG_CONFIG_HOME:-$HOME/.config}/autorandr/" ) fi - if [ "${#AR_DIRS[@]}" -gt 0 ] + if [ -n "${AR_DIRS}" ] then - prfls="$(find "${AR_DIRS[@]}" -mindepth 1 -maxdepth 1 -type d ! -name "*.d" -printf '%f\n' 2>/dev/null | sort -u)" + prfls="$(find "${AR_DIRS[@]}" -mindepth 1 -maxdepth 1 -type d ! -name "*.d" -printf '%f\n' | sort -u)" else prfls="" fi diff --git a/contrib/packaging/autorandr.spec b/contrib/packaging/autorandr.spec new file mode 100644 index 0000000..ffbb4e7 --- /dev/null +++ b/contrib/packaging/autorandr.spec @@ -0,0 +1,77 @@ +%define use_pm_utils 1 +%if 0%{?fedora} > 22 +%define use_pm_utils 0 +%endif +%if 0%{?rhel} > 7 +%define use_pm_utils 0 +%endif + +Name: autorandr +Version: 1.5 +Release: 1%{?dist} +Summary: Automatically select a display configuration based on connected devices + +License: GPL +URL: https://github.com/phillipberndt/autorandr +Source0: https://github.com/phillipberndt/%{name}/archive/%{version}/%{name}-%{version}.tar.gz + +BuildArch: noarch +Requires: python2 +%if 0%{?use_pm_utils} +Requires: pm-utils +%endif +%{?systemd_ordering} +BuildRequires: systemd + +%description + + +%prep +%setup -q + +%build + +%install + +install -D -m 755 autorandr.py %{buildroot}%{_bindir}/autorandr +install -D -m 644 contrib/bash_completion/autorandr %{buildroot}%{_datarootdir}/autorandr/completions/autorandr +install -d -m 755 %{buildroot}%{_datarootdir}/bash-completion/completions +ln -s ../../autorandr/completions/autorandr %{buildroot}%{_datarootdir}/bash-completion/completions/autorandr +install -D -m 755 contrib/pm-utils/40autorandr %{buildroot}%{_sysconfdir}/pm/sleep.d/40autorandr +install -D -m 644 contrib/systemd/autorandr.service %{buildroot}%{_unitdir}/autorandr.service +#install -D -m 644 contrib/udev/40-monitor-hotplug.rules %{buildroot}%{_sysconfdir}/udev/rules.d/40-monitor-hotplug.rules +install -D -m 644 contrib/etc/xdg/autostart/autorandr.desktop %{buildroot}%{_sysconfdir}/etc/xdg/autostart/autorandr.desktop + +%files +%defattr(-,root,root,-) +%attr(0644,root,root) %{_unitdir}/autorandr.service + +%license gpl-3.0.txt +%doc README.md +%{_bindir}/* +%config(noreplace) %{_sysconfdir}/* +%{_datarootdir}/autorandr/* +%{_datarootdir}/bash-completion/completions/autorandr + +#%post +#udevadm control --reload-rules + + +%changelog +* Thu Jul 19 2018 Maciej Sitarz - 1.5-1 +- Updated to stable 1.5 +- Changed dest path for systemd service file +* Sun Oct 01 2017 Jerzy Drozdz - 1.1-2 +- Added conditionals for pm-utils, compability with Fedora26+ +- Removed bash-completion from requisites +- Removed udev from requisites +* Sun Sep 03 2017 Jerzy Drozdz - 1.1-1 +- Update to stable 1.1 +* Fri Feb 17 2017 Jerzy Drozdz - 20170217git-1 +- Update to master +* Wed Jul 6 2016 Jerzy Drozdz - 20160706git-1 +- Set default value of $XDG_CONFIG_DIRS to fulfill the standard +* Fri Jul 1 2016 Jerzy Drozdz - 20160701git-1.1 +- fixed running udevadm in post +* Fri Jul 1 2016 Jerzy Drozdz - 20160701git-1 +- initial build diff --git a/contrib/packaging/rpm/autorandr.spec b/contrib/packaging/rpm/autorandr.spec deleted file mode 100644 index 4b7f369..0000000 --- a/contrib/packaging/rpm/autorandr.spec +++ /dev/null @@ -1,360 +0,0 @@ -%define name autorandr -%define version 1.8.1 -%define release 1 - -# pmutils -%define use_pm_utils 1 -%if 0%{?fedora} > 22 -%define use_pm_utils 0 -%endif -%if 0%{?rhel} > 7 -%define use_pm_utils 0 -%endif - -# python 2 or 3 -%define py_ver 3 -%if 0%{?rhel} -%define py_ver 2 -%endif - -Summary: Automatically select a display configuration based on connected devices -Name: %{name} -Version: %{version} -Release: %{release}%{?dist} -Source0: https://github.com/phillipberndt/%{name}/archive/%{version}/%{name}-%{version}.tar.gz -License: GPLv3 -Group: Development/Libraries -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot -Prefix: %{_prefix} -BuildArch: noarch -Vendor: Phillip Berndt -Url: https://github.com/phillipberndt/autorandr -Requires: python%{py_ver} -%if 0%{?use_pm_utils} -Requires: pm-utils -%endif -%{?systemd_ordering} -BuildRequires: bash-completion -BuildRequires: python%{py_ver}-devel -BuildRequires: systemd -BuildRequires: udev - -%description -# autorandr - -Automatically select a display configuration based on connected devices - -## Branch information - -This is a compatible Python rewrite of -[wertarbyte/autorandr](https://github.com/wertarbyte/autorandr). Contributions -for bash-completion, fd.o/XDG autostart, Nitrogen, pm-utils, and systemd can be -found under [contrib](contrib/). - -The original [wertarbyte/autorandr](https://github.com/wertarbyte/autorandr) -tree is unmaintained, with lots of open pull requests and issues. I forked it -and merged what I thought were the most important changes. If you are searching -for that version, see the [`legacy` branch](https://github.com/phillipberndt/autorandr/tree/legacy). -Note that the Python version is better suited for non-standard configurations, -like if you use `--transform` or `--reflect`. If you use `auto-disper`, you -have to use the bash version, as there is no disper support in the Python -version (yet). Both versions use a compatible configuration file format, so -you can, to some extent, switch between them. I will maintain the `legacy` -branch until @wertarbyte finds the time to maintain his branch again. - -If you are interested in why there are two versions around, see -[#7](https://github.com/phillipberndt/autorandr/issues/7), -[#8](https://github.com/phillipberndt/autorandr/issues/8) and -especially -[#12](https://github.com/phillipberndt/autorandr/issues/12) -if you are unhappy with this version and would like to contribute to the bash -version. - -## License information and authors - -autorandr is available under the terms of the GNU General Public License -(version 3). - -Contributors to this version of autorandr are: - -* Adrián López -* andersonjacob -* Alexander Wirt -* Brice Waegeneire -* Chris Dunder -* Christoph Gysin -* Daniel Hahler -* Maciej Sitarz -* Mathias Svensson -* Matthew R Johnson -* Nazar Mokrynskyi -* Phillip Berndt -* Rasmus Wriedt Larsen -* Simon Wydooghe -* Stefan Tomanek -* stormc -* tachylatus -* Timo Bingmann -* Timo Kaufmann -* Tomasz Bogdal -* Victor Häggqvist -* Jan-Oliver Kaiser - -## Installation/removal - -You can use the `autorandr.py` script as a stand-alone binary. If you'd like to -install it as a system-wide application, there is a Makefile included that also -places some configuration files in appropriate directories such that autorandr -is invoked automatically when a monitor is connected or removed, the system -wakes up from suspend, or a user logs into an X11 session. Run `make install` -as root to install it. - -If you prefer to have a system wide install managed by your package manager, -you can - -* Use the [official Arch package](https://www.archlinux.org/packages/community/any/autorandr/). -* Use the [official Debian package](https://packages.debian.org/sid/x11/autorandr) on sid -* Use the [ebuild from zugaina](https://gpo.zugaina.org/x11-misc/autorandr) on Gentoo. -* Use the - [nix package](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/misc/autorandr.nix) - on NixOS. -* Use the automated nightlies generated by the - [openSUSE build service](https://build.opensuse.org/package/show/home:phillipberndt/autorandr) - for various distributions (RPM and DEB based). -* Use the [X binary package system](https://wiki.voidlinux.eu/XBPS)' on Void Linux -* Build a .deb-file from the source tree using `make deb`. - -We appreciate packaging scripts for other distributions, please file a pull -request if you write one. - -If you prefer `pip` over your package manager, you can install autorandr with: - - sudo pip install "git+http://github.com/phillipberndt/autorandr#egg=autorandr" - -or simply - - sudo pip install autorandr - -if you prefer to use a stable version. - -## How to use - -Save your current display configuration and setup with: - - autorandr --save mobile - -Connect an additional display, configure your setup and save it: - - autorandr --save docked - -Now autorandr can detect which hardware setup is active: - - $ autorandr - mobile - docked (detected) - -To automatically reload your setup: - - $ autorandr --change - -To manually load a profile: - - $ autorandr --load - -or simply: - - $ autorandr - -autorandr tries to avoid reloading an identical configuration. To force the -(re)configuration: - - $ autorandr --load --force - -To prevent a profile from being loaded, place a script call _block_ in its -directory. The script is evaluated before the screen setup is inspected, and -in case of it returning a value of 0 the profile is skipped. This can be used -to query the status of a docking station you are about to leave. - -If no suitable profile can be identified, the current configuration is kept. -To change this behaviour and switch to a fallback configuration, specify -`--default `. The system-wide installation of autorandr by default -calls autorandr with a parameter `--default default`. There are three special, -virtual configurations called `horizontal`, `vertical` and `common`. They -automatically generate a configuration that incorporates all screens -connected to the computer. You can symlink `default` to one of these -names in your configuration directory to have autorandr use any of them -as the default configuration without you having to change the system-wide -configuration. - -You can store default values for any option in an INI-file in -`~/.config/autorandr/settings.ini` in a section `config`. The most useful -candidate for doing that is `skip-options`, if you need it. - -## Advanced usage - -### Hook scripts - -Three more scripts can be placed in the configuration directory (as -(as defined by the [XDG spec](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html), -usually `~/.config/autorandr` or `~/.autorandr` if you have an old installation -for user configuration and `/etc/xdg/autorandr` for system wide configuration): - -- `postswitch` is executed *after* a mode switch has taken place. This can be - used to notify window managers or other applications about the switch. -- `preswitch` is executed *before* a mode switch takes place. -- `postsave` is executed after a profile was stored or altered. -- `predetect` is executed before autorandr attempts to run xrandr. - -These scripts must be executable and can be placed directly in the configuration -directory, where they will always be executed, or in the profile subdirectories, -where they will only be executed on changes regarding that specific profile. - -Instead (or in addition) to these scripts, you can also place as many executable -files as you like in subdirectories called `script_name.d` (e.g. `postswitch.d`). - -If a script with the same name occurs multiple times, user configuration -takes precedence over system configuration (as specified by the -[XDG spec](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)) -and profile configuration over general configuration. - -As a concrete example, suppose you have the files - -- `/etc/xdg/autorandr/postswitch` -- `~/.config/autorandr/postswitch` -- `~/.config/autorandr/postswitch.d/notify-herbstluftwm` -- `~/.config/autorandr/docked/postswitch` - -and switch from `mobile` to `docked`. Then -`~/.config/autorandr/docked/postswitch` is executed, since the profile specific -configuration takes precedence, and -`~/.config/autorandr/postswitch.d/notify-herbstluftwm` is executed, since -it has a unique name. - -If you switch back from `docked` to `mobile`, `~/.config/autorandr/postswitch` -is executed instead of the `mobile` specific `postswitch`. - -In these scripts, some of autorandr's state is exposed as environment variables -prefixed with `AUTORANDR_`, such as: -- `AUTORANDR_CURRENT_PROFILE` -- `AUTORANDR_CURRENT_PROFILES` -- `AUTORANDR_PROFILE_FOLDER` -- `AUTORANDR_MONITORS` - -If you experience issues with xrandr being executed too early after connecting -a new monitor, then you can use a `predetect` script to delay the execution. -Write e.g. `sleep 1` into that file to make autorandr wait a second before -running `xrandr`. - -### Wildcard EDID matching - -The EDID strings in the `~/.config/autorandr/*/setup` files may contain an -asterisk to enable wildcard matching: Such EDIDs are matched against connected -monitors using the usual file name globbing rules. This can be used to create -profiles matching multiple (or any) monitors. - -## Changelog - -**autorandr 1.8.1** - -* *2019-03-18* Removed mandb call from Makefile - -**autorandr 1.8** - -* *2019-02-17* Add an X11 daemon that runs autorandr when a display connects (by @rliou92, #127) -* *2019-02-17* Replace width=0 check with disconnected to detect disconnected monitors (by @joseph-jones, #139) -* *2019-02-17* Fix handling of empty padding (by @jschwab, #138) -* *2019-02-17* Add a man page (by @somers-all-the-time, #133) - -**autorandr 1.7** - -* *2018-09-25* Fix FB size computation with rotated screens (by @Janno, #117) - -**autorandr 1.6** - -* *2018-04-19* Bugfix: Do not load default profile unless --change is set -* *2018-04-30* Added a `AUTORANDR_MONITORS` variable to hooks (by @bricewge, #106) -* *2018-06-29* Fix detection of current configuration if extra monitors are active -* *2018-07-11* Bugfix in the latest change: Correctly handle "off" minitors when comparing -* *2018-07-19* Do not kill spawned user processes from systemd unit -* *2018-07-20* Correctly handle "off" monitors when comparing -- fixup for another bug. - -**autorandr 1.5** - -* *2018-01-03* Add --version -* *2018-01-04* Fixed vertical/horizontal/clone-largest virtual profiles -* *2018-03-07* Output all non-error messages to stdout instead of stderr -* *2018-03-25* Add --detected and --current to filter the profile list output -* *2018-03-25* Allow wildcard matching in EDIDs - -**autorandr 1.4** - -* *2017-12-22* Fixed broken virtual profile support -* *2017-12-14* Added support for a settings file -* *2017-12-14* Added a virtual profile `off`, which disables all screens - -**autorandr 1.3** - -* *2017-11-13* Add a short form for `--load` -* *2017-11-21* Fix environment stealing in `--batch` mode (See #87) - -**autorandr 1.2** - -* *2017-07-16* Skip `--panning` unless it is required (See #72) -* *2017-10-13* Add `clone-largest` virtual profile - -**autorandr 1.1** - -* *2017-06-07* Call systemctl with `--no-block` from udev rule (See #61) -* *2017-01-20* New script hook, `predetect` -* *2017-01-18* Accept comments (lines starting with `#`) in config/setup files - -**autorandr 1.0** - -* *2016-12-07* Tag the current code as version 1.0.0; see github issue #54 -* *2016-10-03* Install a desktop file to `/etc/xdg/autostart` by default - - -%prep -%setup -n %{name}-%{version} -n %{name}-%{version} -%if %{py_ver} == 3 -pathfix.py -pni "%{__python3} %{py3_shbang_opts}" ./autorandr.py -%else -pathfix.py -pni "%{__python2} %{py2_shbang_opts}" ./autorandr.py -%endif - -%install -make DESTDIR="%{buildroot}" PREFIX=/usr install -install -vDm 644 README.md -t "%{buildroot}/usr/share/doc/%{name}/" - -%files -%defattr(-,root,root,-) -%attr(0644,root,root) %{_unitdir}/autorandr.service -%license gpl-3.0.txt -%doc README.md -%config(noreplace) %{_sysconfdir}/* -%{_bindir}/* -%{_mandir} -%{_datarootdir}/bash-completion/completions/autorandr -%{_udevrulesdir}/40-monitor-hotplug.rules -%changelog -* Wed May 22 2019 Maciej Sitarz - 1.8.1-1 -- Updated to stable 1.8.1 -* Fri Sep 28 2018 Maciej Sitarz - 1.7-1 -- Updated to stable 1.7 -* Thu Jul 19 2018 Maciej Sitarz - 1.5-1 -- Updated to stable 1.5 -- Changed dest path for systemd service file -* Sun Oct 01 2017 Jerzy Drozdz - 1.1-2 -- Added conditionals for pm-utils, compability with Fedora26+ -- Removed bash-completion from requisites -- Removed udev from requisites -* Sun Sep 03 2017 Jerzy Drozdz - 1.1-1 -- Update to stable 1.1 -* Fri Feb 17 2017 Jerzy Drozdz - 20170217git-1 -- Update to master -* Wed Jul 6 2016 Jerzy Drozdz - 20160706git-1 -- Set default value of $XDG_CONFIG_DIRS to fulfill the standard -* Fri Jul 1 2016 Jerzy Drozdz - 20160701git-1.1 -- fixed running udevadm in post -* Fri Jul 1 2016 Jerzy Drozdz - 20160701git-1 -- initial build