From 0a5e840c045c21dba197692b5c51deb7539655ae Mon Sep 17 00:00:00 2001 From: Alexander Hosking Date: Wed, 5 Apr 2017 21:02:37 -0400 Subject: [PATCH] Add Fancy Lock to i3 Don't forget to install scrot, imagemagick and i3lock! --- .i3/config | 3 +- .i3/i3 | 1 - .i3/i3lock-fancy-multimonitor/LICENSE | 22 +++++++++ .i3/i3lock-fancy-multimonitor/README.md | 31 +++++++++++++ .i3/i3lock-fancy-multimonitor/lock | 59 ++++++++++++++++++++++++ .i3/i3lock-fancy-multimonitor/lock.png | Bin 0 -> 4687 bytes .i3/i3lock-fancy-multimonitor/text.png | Bin 0 -> 13872 bytes 7 files changed, 114 insertions(+), 2 deletions(-) delete mode 120000 .i3/i3 create mode 100644 .i3/i3lock-fancy-multimonitor/LICENSE create mode 100644 .i3/i3lock-fancy-multimonitor/README.md create mode 100755 .i3/i3lock-fancy-multimonitor/lock create mode 100644 .i3/i3lock-fancy-multimonitor/lock.png create mode 100644 .i3/i3lock-fancy-multimonitor/text.png diff --git a/.i3/config b/.i3/config index 09cb7be..ee19976 100644 --- a/.i3/config +++ b/.i3/config @@ -136,7 +136,8 @@ bindsym $mod+Shift+p restart bindsym $mod+Shift+period exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" ## Lock the screen -bindsym Control+Mod1+l exec i3lock --fuzzy +#bindsym Control+Mod1+l exec i3lock --fuzzy +bindsym Control+Mod1+l exec /home/ahosking/.i3/i3lock-fancy-multimonitor/lock # resize window (you can also use the mouse for that) mode "resize" { diff --git a/.i3/i3 b/.i3/i3 deleted file mode 120000 index 87ca232..0000000 --- a/.i3/i3 +++ /dev/null @@ -1 +0,0 @@ -/home/ahosking/dotfiles/i3 \ No newline at end of file diff --git a/.i3/i3lock-fancy-multimonitor/LICENSE b/.i3/i3lock-fancy-multimonitor/LICENSE new file mode 100644 index 0000000..ff87a9e --- /dev/null +++ b/.i3/i3lock-fancy-multimonitor/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Gui Meira + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/.i3/i3lock-fancy-multimonitor/README.md b/.i3/i3lock-fancy-multimonitor/README.md new file mode 100644 index 0000000..c8ad2a3 --- /dev/null +++ b/.i3/i3lock-fancy-multimonitor/README.md @@ -0,0 +1,31 @@ +# i3lock-fancy-multimonitor +The idea for this project was shamelessly copied from [meskarune](https://github.com/meskarune)'s [i3lock-fancy](https://github.com/meskarune/i3lock-fancy). + +It uses [scrot](http://freecode.com/projects/scrot) to take a screenshot of the desktop, then [ImageMagick](http://www.imagemagick.org/) blurs the image and adds a lock icon and text. + +By using information from [xrandr](http://www.x.org/wiki/Projects/XRandR/) and basic math, this script supports multiple monitor setups, displaying the icon and text centered on all screens. + +The lock icon is different from the original project, with a transparent black circle around it. The text is also an image, making it easier to customize (and to put it at the correct position). Finally, it uses vanilla [i3lock](https://github.com/i3/i3lock) instead of [i3lock-color](https://github.com/eBrnd/i3lock-color). The author of i3lock-color [is not maintaining it anymore](https://github.com/eBrnd/i3lock-color/issues/6). If you want to customize the colors of i3lock, the recommended version of i3lock-color is [this one](https://github.com/Arcaena/i3lock-color), maintained by [Chris Guillott](https://github.com/Arcaena). + +## Installation +Make sure you have all the dependencies: + +``` +sudo apt-get install scrot imagemagick i3lock +``` + +Copy the `lock` script along with the images to some place on your system (e.g.: the i3 folder) and give it execution permission: + +``` +git clone https://github.com/guimeira/i3lock-fancy-multimonitor.git +cp -r i3lock-fancy-multimonitor ~/.i3 +chmod +x ~/.i3/i3lock-fancy-multimonitor/lock +``` + +Create a key binding on your i3 config file (in this example I'm using $mod+p): + +``` +echo "bindsym \$mod+p exec /home//.i3/i3lock-fancy-multimonitor/lock" >> ~/.i3/config +``` + +Now reload the i3 configuration file. By default, the key binding is `$mod+Shift+c`. diff --git a/.i3/i3lock-fancy-multimonitor/lock b/.i3/i3lock-fancy-multimonitor/lock new file mode 100755 index 0000000..4a6bb27 --- /dev/null +++ b/.i3/i3lock-fancy-multimonitor/lock @@ -0,0 +1,59 @@ +#!/bin/bash +# All options are here: http://www.imagemagick.org/Usage/blur/#blur_args +#BLURTYPE="0x5" +#BLURTYPE="0x2" +BLURTYPE="5x3" +#BLURTYPE="2x8" +#BLURTYPE="2x3" + +DISPLAY_RE="([0-9]+)x([0-9]+)\\+([0-9]+)\\+([0-9]+)" +IMAGE_RE="([0-9]+)x([0-9]+)" +FOLDER=`dirname "$BASH_SOURCE"` +LOCK="$FOLDER/lock.png" +TEXT="$FOLDER/text.png" +PARAMS="" +OUTPUT_IMAGE="/tmp/i3lock.png" + +#Take screenshot: +scrot -z $OUTPUT_IMAGE + +#Get dimensions of the lock image: +LOCK_IMAGE_INFO=`identify $LOCK` +[[ $LOCK_IMAGE_INFO =~ $IMAGE_RE ]] +IMAGE_WIDTH=${BASH_REMATCH[1]} +IMAGE_HEIGHT=${BASH_REMATCH[2]} + +#Get dimensions of the text image: +TEXT_IMAGE_INFO=`identify $TEXT` +[[ $TEXT_IMAGE_INFO =~ $IMAGE_RE ]] +TEXT_WIDTH=${BASH_REMATCH[1]} +TEXT_HEIGHT=${BASH_REMATCH[2]} + +#Execute xrandr to get information about the monitors: +while read LINE +do + #If we are reading the line that contains the position information: + if [[ $LINE =~ $DISPLAY_RE ]]; then + #Extract information and append some parameters to the ones that will be given to ImageMagick: + WIDTH=${BASH_REMATCH[1]} + HEIGHT=${BASH_REMATCH[2]} + X=${BASH_REMATCH[3]} + Y=${BASH_REMATCH[4]} + POS_X=$(($X+$WIDTH/2-$IMAGE_WIDTH/2)) + POS_Y=$(($Y+$HEIGHT/2-$IMAGE_HEIGHT/2)) + TEXT_X=$(($X+$WIDTH/2-$TEXT_WIDTH/2)) + TEXT_Y=$(($Y+$HEIGHT/2-$TEXT_HEIGHT/2+200)) + + PARAMS="$PARAMS '$LOCK' '-geometry' '+$POS_X+$POS_Y' '-composite' '$TEXT' '-geometry' '+$TEXT_X+$TEXT_Y' '-composite'" + fi +done <<<"`xrandr`" + +#Execute ImageMagick: +PARAMS="'$OUTPUT_IMAGE' '-level' '0%,100%,0.6' '-blur' '$BLURTYPE' $PARAMS '$OUTPUT_IMAGE'" +eval convert $PARAMS + +#Lock the screen: +i3lock -i $OUTPUT_IMAGE -t + +#Remove the generated image: +rm $OUTPUT_IMAGE diff --git a/.i3/i3lock-fancy-multimonitor/lock.png b/.i3/i3lock-fancy-multimonitor/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..620aa5b800be2e65ffc408ff87cf565375b0bab8 GIT binary patch literal 4687 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 SXfyEnL!l2bzF(*HDCR$ni3pzn literal 0 HcmV?d00001 diff --git a/.i3/i3lock-fancy-multimonitor/text.png b/.i3/i3lock-fancy-multimonitor/text.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a4369fed8f6c1e8f2b35feafa0acae7021fba9 GIT binary patch literal 13872 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 Y(J4G0OyaeIr@N3RGK$hAQU-qi57x>=m;e9( literal 0 HcmV?d00001