Como posso programar a função de escala do xrandr para mudar para a resolução seguinte ou anterior em uma lista predefinida?

1

xrandr tem um recurso bacana que permite dimensionar toda a tela para que a resolução virtual seja maior ou menor que a resolução real. Eu o uso na tela de resolução 1024x600 do meu netbook para trabalhar em um espaço de trabalho de resolução de 1280x750. Posso configurar atalhos de teclado para aumentar / diminuir / redefinir o fator de escala que estou usando atualmente? Alguns aplicativos fazem muito bem com o espaço extra, enquanto alguns são mais difíceis de ler. Eu já sei como configurar atalhos de teclado na minha distribuição, mas não sei como fazer o xrandr aceitar esse tipo de entrada diferencial

    
por Suchipi 22.10.2013 / 04:18

1 resposta

2

Eu escrevi o script a seguir para poder alterar meu fator de escala dinamicamente usando atalhos de teclado no meu netbook Dell Mini 10v:

#!/bin/bash
#/usr/local/bin/xrandr-scale-tool

#first, we read the config files
if [ -r ~/.config/xrandr-scale-tool/xscale ] 
  then 
    xscale=$(~/.config/xrandr-scale-tool/xscale 
fi
if [ ! -e ~/.config/xrandr-scale-tool/output ] 
  then 
    output=LVDS1 
    echo $output>~/.config/xrandr-scale-tool/output 
fi
if [ ! -e ~/.config/xrandr-scale-tool/baseresx ] 
  then 
    baseresx=1024 
    echo $baseresx>~/.config/xrandr-scale-tool/baseresx 
fi
if [ ! -e ~/.config/xrandr-scale-tool/baseresy ] 
  then 
    baseresy=600 
    echo $baseresy>~/.config/xrandr-scale-tool/baseresy 
fi

#if they aren't readable, exit with status 1
if [ ! -r ~/.config/xrandr-scale-tool/xscale ] || [ ! -r ~/.config/xrandr-scale-tool/baseresx ] || [ ! -r ~/.config/xrandr-scale-tool/baseresy ] || [ ! -r ~/.config/xrandr-scale-tool/output ] 
  then 
    echo A config file could not be read 
    exit 1 
fi

#now, we check the first argument to see what to do
if [ -z "$1" ]
  then
    #restore from settings
    xrandr --output $output --scale ${xscale}x${xscale} --panning 0x0+0+0
    xrandr --output $output --scale ${xscale}x${xscale} --panning 'xrandr -q | awk -F'current' -F',' 'NR==1 {gsub("( |current)","");print $2}''
fi

if [ "$1" == "+" ]
  then
    #increment and apply
    amt=$2
    xscale='echo $xscale+$amt|bc'
    xrandr --output $output --scale ${xscale}x${xscale} --panning 0x0+0+0
    xrandr --output $output --scale ${xscale}x${xscale} --panning 'xrandr -q | awk -F'current' -F',' 'NR==1 {gsub("( |current)","");print $2}''
    sleep 2
    notify-send "Scale Factor: $xscale" --icon=display
fi

if [ "$1" == "-" ]
  then
    #decrement and apply
    amt=$2
    xscale='echo $xscale-$amt|bc'
    xrandr --output $output --scale ${xscale}x${xscale} --panning 0x0+0+0
    xrandr --output $output --scale ${xscale}x${xscale} --panning 'xrandr -q | awk -F'current' -F',' 'NR==1 {gsub("( |current)","");print $2}''
    sleep 2
    notify-send "Scale Factor: $xscale" --icon=display
fi

if [ "$1" == "reset" ]
  then
    #reset
    xscale=1
    xrandr --output $output --scale ${xscale}x${xscale} --panning 'echo $xscale*$baseresx|bc'x'echo $xscale*$baseresy|bc'
    sleep 2
    notify-send "Scale Factor: $xscale" --icon=display
fi

#record changes in scale to file before exiting
echo $xscale>~/.config/xrandr-scale-tool/xscale
exit 0

Esse script presume que sua resolução padrão é 1024x600 e você está usando a exibição em LVDS1. Se esse não for o caso, edite os arquivos em ~/.config/xrandr-scale-tool para refletir isso (os arquivos de configuração são gerados após a primeira execução).

Esse script pode ser executado de quatro maneiras:
xrandr-scale-tool restaura as configurações de escala do arquivo de configuração, que é salvo em cada execução.% xrandr-scale-tool + 0.1 incrementa a escala em 0,1. Você pode usar qualquer número aqui e xrandr-scale-tool - 0.1 diminui a escala em 0,1. Novamente, qualquer número funciona e xrandr-scale-tool reset redefine a escala para 1.
Cada vez que a escala é alterada, notify-send é executado para mostrar o fator de escala atual por meio de uma notificação.

A maneira como eu configurei o meu é que xrandr-scale-tool + 0.125 é mapeado para Ctrl Alt + , xrandr-scale-tool - 0.125 é mapeado para Ctrl Alt - , e xrandr-scale-tool reset é mapeado para Ctrl Alt 0 . xrandr-scale-tool é executado, sem argumentos, no login, de modo que qualquer escala que eu estivesse usando antes está em uso no próximo login.

    
por 22.10.2013 / 04:18