much faster blur
This commit is contained in:
		
							parent
							
								
									fa09281b48
								
							
						
					
					
						commit
						afe4dc5e12
					
				
							
								
								
									
										13
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | PREFIX = $(HOME)/.local | ||||||
|  | 
 | ||||||
|  | .PHONY: install | ||||||
|  | install: | ||||||
|  | 	mkdir -p $(PREFIX)/share/i3lock-blur | ||||||
|  | 	mkdir -p $(PREFIX)/bin | ||||||
|  | 	cp i3lock-blur $(PREFIX)/bin/ | ||||||
|  | 	cp lock.png $(PREFIX)/share/i3lock-blur/ | ||||||
|  | 
 | ||||||
|  | .PHONY: uninstall | ||||||
|  | uninstall:  | ||||||
|  | 	rm -f $(PREFIX)/bin/i3lock-blur | ||||||
|  | 	rm -rf $(PREFIX)/share/i3lock-blur | ||||||
							
								
								
									
										44
									
								
								i3lock-blur
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										44
									
								
								i3lock-blur
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  | 
 | ||||||
|  | LOCK_ICON="$HOME/.local/share/i3lock-blur/lock.png" | ||||||
|  | IMAGE=$(mktemp --suffix=.png) | ||||||
|  | TMP_IMAGE=$(mktemp --suffix=.png) | ||||||
|  | 
 | ||||||
|  | RES=$(xdpyinfo | awk '/dimensions/{print $2}') | ||||||
|  | 
 | ||||||
|  | # initial blurred screen | ||||||
|  | ffmpeg -f x11grab \ | ||||||
|  |     -video_size $RES \ | ||||||
|  |     -y -i $DISPLAY \ | ||||||
|  |     -filter_complex "boxblur=5:1" \ | ||||||
|  |     -vframes 1 $IMAGE \ | ||||||
|  |     -loglevel quiet | ||||||
|  | 
 | ||||||
|  | # inserting a lock in the center of each display | ||||||
|  | while read LINE | ||||||
|  | do | ||||||
|  |     if [[ "$LINE" =~ ([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+) ]]; then | ||||||
|  |         # matched connected display, copying into temp image | ||||||
|  |         cp $IMAGE $TMP_IMAGE | ||||||
|  | 
 | ||||||
|  |         # BASH_REMATCH is ... H_RES V_RES X_offset Y_offset | ||||||
|  |         # finding midpoint of display + offset - lock dims | ||||||
|  |         MIDXi=$((${BASH_REMATCH[1]} / 2 + ${BASH_REMATCH[3]} - 30)) | ||||||
|  |         MIDYi=$((${BASH_REMATCH[2]} / 2 + ${BASH_REMATCH[4]} - 30)) | ||||||
|  | 
 | ||||||
|  |         # inserting lock into center of the display on the image | ||||||
|  |         ffmpeg -y \ | ||||||
|  |             -i $TMP_IMAGE \ | ||||||
|  |             -i $LOCK_ICON \ | ||||||
|  |             -filter_complex "overlay=$MIDXi:$MIDYi" \ | ||||||
|  |             -vframes 1 $IMAGE \ | ||||||
|  |             -loglevel quiet | ||||||
|  | 
 | ||||||
|  |     fi | ||||||
|  | done <<<"$(xrandr)" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | i3lock -n -i "$IMAGE" | ||||||
|  | 
 | ||||||
|  | # clean up | ||||||
|  | rm $IMAGE $TMP_IMAGE | ||||||
| @ -1,100 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| # Author: Dolores Portalatin <hello@doloresportalatin.info> |  | ||||||
| # Dependencies: imagemagick, i3lock-color-git, scrot |  | ||||||
| set -o errexit -o noclobber -o nounset |  | ||||||
| 
 |  | ||||||
| HUE=(-level 0%,100%,0.6) |  | ||||||
| EFFECT=(-filter Gaussian -resize 20% -define filter:sigma=1.5 -resize 500.5%) |  | ||||||
| # default system sans-serif font |  | ||||||
| FONT="$(convert -list font | awk "{ a[NR] = \$2 } /family: $(fc-match sans -f "%{family}\n")/ { print a[NR-1]; exit }")" |  | ||||||
| #IMAGE="$(mktemp).png" |  | ||||||
| IMAGE=$(mktemp --suffix=.png) |  | ||||||
| SHOT=(import -silent -window root) |  | ||||||
| DM=$(xdpyinfo | awk '/^  dimensions(.+([0-9]+))/{print $2}') |  | ||||||
| 
 |  | ||||||
| OPTIONS="Options: |  | ||||||
|     -h, --help   This help menu. |  | ||||||
|     -g, --greyscale  Set background to greyscale instead of color. |  | ||||||
|     -p, --pixelate   Pixelate the background instead of blur, runs faster. |  | ||||||
|     -f <fontname>, --font <fontname>  Set a custom font. Type 'convert -list font' in a terminal to get a list." |  | ||||||
| 
 |  | ||||||
| # move pipefail down as for some reason "convert -list font" returns 1 |  | ||||||
| set -o pipefail |  | ||||||
| trap 'rm -f "$IMAGE"' EXIT |  | ||||||
| TEMP="$(getopt -o :hpgf: -l help,pixelate,greyscale,font: --name "$0" -- "$@")" |  | ||||||
| eval set -- "$TEMP" |  | ||||||
| 
 |  | ||||||
| while true ; do |  | ||||||
|     case "$1" in |  | ||||||
|         -h|--help) |  | ||||||
|             printf "Usage: $(basename $0) [options]\n\n$OPTIONS\n\n" ; exit 1 ;; |  | ||||||
|         -g|--greyscale) HUE=(-level 0%,100%,0.6 -set colorspace Gray -separate -average) ; shift ;; |  | ||||||
|         -p|--pixelate) EFFECT=(-scale 10% -scale 1000%) ; shift ;; |  | ||||||
|         -f|--font) |  | ||||||
|             case "$2" in |  | ||||||
|                 "") shift 2 ;; |  | ||||||
|                 *) FONT=$2 ; shift 2 ;; |  | ||||||
|             esac ;; |  | ||||||
|         --) shift ; break ;; |  | ||||||
|         *) echo "error" ; exit 1 ;; |  | ||||||
|     esac |  | ||||||
| done |  | ||||||
| 
 |  | ||||||
| # l10n support |  | ||||||
| TEXT="Type password to unlock" |  | ||||||
| case "${LANG:-}" in |  | ||||||
|     de_* ) TEXT="Bitte Passwort eingeben" ;; # Deutsch |  | ||||||
|     da_* ) TEXT="Indtast adgangskode" ;; # Danish |  | ||||||
|     en_* ) TEXT="Type password to unlock" ;; # English |  | ||||||
|     es_* ) TEXT="Ingrese su contraseña" ;; # Española |  | ||||||
|     fr_* ) TEXT="Entrez votre mot de passe" ;; # Français |  | ||||||
|     he_* ) TEXT="הליענה לטבל המסיס דלקה" ;; # Hebrew עברית (convert doesn't play bidi well) |  | ||||||
|     id_* ) TEXT="Masukkan kata sandi Anda" ;; # Bahasa Indonesia |  | ||||||
|     it_* ) TEXT="Inserisci la password" ;; # Italian |  | ||||||
|     ja_* ) TEXT="パスワードを入力してください" ;; # Japanese |  | ||||||
|     lv_* ) TEXT="Ievadi paroli" ;; # Latvian |  | ||||||
|     pl_* ) TEXT="Podaj hasło" ;; # Polish |  | ||||||
|     pt_* ) TEXT="Digite a senha para desbloquear" ;; # Português |  | ||||||
|     ru_* ) TEXT="Введите пароль" ;; # Russian |  | ||||||
|     * ) TEXT="Type password to unlock" ;; # Default to English |  | ||||||
| esac |  | ||||||
| 
 |  | ||||||
| #scrot -z "$IMAGE" |  | ||||||
| command -- "${SHOT[@]}" "$IMAGE" |  | ||||||
| 
 |  | ||||||
| ICON="/usr/share/i3lock-fancy-dualmonitor/lock.png" |  | ||||||
| PARAM=("--insidecolor=0000001c" "--ringcolor=0000003e" \ |  | ||||||
|     "--linecolor=00000000" "--keyhlcolor=ffffff80" "--ringvercolor=ffffff00" \ |  | ||||||
|     "--separatorcolor=22222260" "--insidevercolor=ffffff1c" \ |  | ||||||
|     "--ringwrongcolor=ffffff55" "--insidewrongcolor=ffffff1c" \ |  | ||||||
|     "--verifcolor=ffffff00" "--wrongcolor=ff000000" "--timecolor=ffffff00" \ |  | ||||||
|     "--datecolor=ffffff00" "--layoutcolor=ffffff00") |  | ||||||
| 
 |  | ||||||
| LOCK=() |  | ||||||
| while read LINE |  | ||||||
| do |  | ||||||
|     if [[ "$LINE" =~ ([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+) ]]; then |  | ||||||
|         W=${BASH_REMATCH[1]} |  | ||||||
|         H=${BASH_REMATCH[2]} |  | ||||||
|         Xoff=${BASH_REMATCH[3]} |  | ||||||
|         Yoff=${BASH_REMATCH[4]} |  | ||||||
|         MIDXi=$(($W / 2 + $Xoff - 60  / 2)) |  | ||||||
|         MIDYi=$(($H / 2 + $Yoff - 60  / 2)) |  | ||||||
|         MIDXt=$(($W / 2 + $Xoff - 285 / 2)) |  | ||||||
|         MIDYt=$(($H / 2 + $Yoff + 320 / 2)) |  | ||||||
|         MIDXts=$(($MIDXt + 2)) |  | ||||||
|         MIDYts=$(($MIDYt + 2)) |  | ||||||
|         LOCK+=(\( -size $DM xc:none -font $FONT -pointsize 26 -fill black -annotate +$MIDXts+$MIDYts "$TEXT" -blur 0x2 \ |  | ||||||
|                -fill black -annotate +$MIDXts+$MIDYts "$TEXT" -blur 0x1 -fill white -annotate +$MIDXt+$MIDYt "$TEXT" \) \ |  | ||||||
|                -flatten \ |  | ||||||
|                $ICON -geometry +$MIDXi+$MIDYi -composite) |  | ||||||
|     fi |  | ||||||
| done <<<"$(xrandr)" |  | ||||||
| 
 |  | ||||||
| convert "$IMAGE" "${HUE[@]}" "${EFFECT[@]}" "${LOCK[@]}" "$IMAGE" |  | ||||||
| 
 |  | ||||||
| # try to use a forked version of i3lock with prepared parameters |  | ||||||
| if ! i3lock -n "${PARAM[@]}" -i "$IMAGE" > /dev/null 2>&1; then |  | ||||||
|     # We have failed, lets get back to stock one |  | ||||||
|     i3lock -n -i "$IMAGE" |  | ||||||
| fi |  | ||||||
							
								
								
									
										8
									
								
								lock.sh
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								lock.sh
									
									
									
									
									
								
							| @ -1,8 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| TMPBG=/tmp/screen.png |  | ||||||
| LOCK=$HOME/lock.png |  | ||||||
| RES=$(xrandr | grep 'current' | sed -E 's/.*current\s([0-9]+)\sx\s([0-9]+).*/\1x\2/') |  | ||||||
|   |  | ||||||
| ffmpeg -f x11grab -video_size $RES -y -i $DISPLAY -i $LOCK -filter_complex "boxblur=5:1,overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -vframes 1 $TMPBG -loglevel quiet |  | ||||||
| i3lock -i $TMPBG |  | ||||||
| rm $TMPBG |  | ||||||
							
								
								
									
										26
									
								
								res
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								res
									
									
									
									
									
								
							| @ -1,26 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| 
 |  | ||||||
| SR="$(xrandr -q | grep ' connected ' | grep -o '[0-9]*x[0-9]*+[0-9]*+[0-9]*')" |  | ||||||
| 
 |  | ||||||
| for RES in $SR; do |  | ||||||
|     W="$(awk -F '[x+]' '{print $1}' <<< "$RES")" |  | ||||||
|     H="$(awk -F '[x+]' '{print $2}' <<< "$RES")" |  | ||||||
|     Xoff="$(awk -F '[x+]' '{print $3}' <<< "$RES")" |  | ||||||
|     Yoff="$(awk -F '[x+]' '{print $4}' <<< "$RES")" |  | ||||||
|     MIDX=$(($W / 2 + $Xoff - 60  / 2)) |  | ||||||
|     MIDY=$(($H / 2 + $Yoff - 60  / 2)) |  | ||||||
|     printf "X: $W\nY: $H\nX-offset: $Xoff\nY-offset: $Yoff\nmiddlex: $MIDX\nmiddley: $MIDY\n" |  | ||||||
| done |  | ||||||
| 
 |  | ||||||
| while read LINE |  | ||||||
| do |  | ||||||
|     if [[ "$LINE" =~ ([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+) ]]; then |  | ||||||
|         W=${BASH_REMATCH[1]} |  | ||||||
|         H=${BASH_REMATCH[2]} |  | ||||||
|         Xoff=${BASH_REMATCH[3]} |  | ||||||
|         Yoff=${BASH_REMATCH[4]} |  | ||||||
|         MIDX=$(($W / 2 + $Xoff - 60  / 2)) |  | ||||||
|         MIDY=$(($H / 2 + $Yoff - 60  / 2)) |  | ||||||
|         printf "X: $W\nY: $H\nX-offset: $Xoff\nY-offset: $Yoff\nmiddlex: $MIDX\nmiddley: $MIDY\n" |  | ||||||
|     fi |  | ||||||
| done <<<"$(xrandr)" |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user