Last active
          April 17, 2025 16:12 
        
      - 
      
- 
        Save nicolas-oliveira/709e93d87e7fb2bd56cb054392c3767b to your computer and use it in GitHub Desktop. 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | #!/bin/bash | |
| # Absolute path to xrandr | |
| TARGET_WIDTH=${TARGET_WIDTH:-2560} | |
| TARGET_HEIGHT=${TARGET_HEIGHT:-1440} | |
| POSITION="right" | |
| XRANDR="/usr/bin/xrandr" | |
| # NVIDIA="$(nvidia-settings -q CurrentMetaMode -t)" | |
| LAPTOP=$($XRANDR | awk '/ connected/ && /eDP/{print $1}') | |
| EXT=$(xrandr | awk '/ connected/ && !/eDP/{print $1}') | |
| if [[ -z "$LAPTOP" ]]; then | |
| echo "Error: Could not detect laptop (eDP) output." >&2 | |
| exit 1 | |
| fi | |
| if [[ -z "$EXT" ]]; then | |
| echo "Apenas um monitor foi detectado. Redefinindo: $LAPTOP." | |
| $XRANDR --output "$LAPTOP" --auto | |
| exit 0 | |
| fi | |
| # FUNÇÃO QUE PREPARA O SCRIPT PARA SER EXECUTADO EM CASOS | |
| # EM QUE O USUÁRIO ATUAL NÃO É USUÁRIO QUE ESTÁ USANDO O MONITOR | |
| # ESSA FUNÇÃO FOI CRIADA JUNTAMENTE COM A TENTATIVA DE EXECUTAR ESSE | |
| # SCRIPT COMO DAEMON PORÉM NÃO FUNCIONOU | |
| # function run-in-user-session() { | |
| # _display_id=":$(find /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)" | |
| # _username=$(who | grep "\(${_display_id}\)" | awk '{print $1}') | |
| # _user_id=$(id -u "$_username") | |
| # _environment=("DISPLAY=$_display_id" "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$_user_id/bus") | |
| # sudo -Hu "$_username" env "${_environment[@]}" "$@" | |
| # } | |
| second_monitor_commands() { | |
| gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 50 | |
| gsettings set org.gnome.desktop.interface text-scaling-factor 1.05 | |
| gsettings set org.gnome.desktop.interface monospace-font-name 'SF Mono Powerline 11' | |
| gsettings set org.gnome.desktop.interface font-name 'SF Pro Display 11' | |
| gsettings set org.gnome.desktop.interface document-font-name 'SF Pro Display 11' | |
| gsettings set org.gnome.desktop.wm.preferences titlebar-font 'SF Pro Text Regular 11' | |
| # LER AS VARIÁVEIS ORIUNDAS DO XRANDR | |
| read LAP_W LAP_H < <(xrandr | awk -v MON="$LAPTOP" '$1==MON && /connected/{getline; print $1}' | awk -Fx '{print $1, $2}') | |
| read EXT_W EXT_H < <(xrandr | awk -v MON="$EXT" '$1==MON && /connected/{getline; print $1}' | awk -Fx '{print $1, $2}') | |
| # CALCULAR A RESOLUÇÃO FINAL | |
| scaleX=$(awk "BEGIN {printf \"%.10f\", $TARGET_WIDTH/$EXT_W}") | |
| scaleY=$(awk "BEGIN {printf \"%.10f\", $TARGET_HEIGHT/$EXT_H}") | |
| # Calcular as dimensões gerais do framebuffer | |
| FB_W=$(awk "BEGIN {printf \"%d\", $LAP_W + $EXT_W * $scaleX}") | |
| FB_H=$(awk "BEGIN {printf \"%d\", ( $LAP_H > $EXT_H * $scaleY ? $LAP_H : $EXT_H * $scaleY ) }") | |
| echo $FB_W | |
| echo $FB_H | |
| # APLICAR O NOVO FRAMEBUFFER | |
| $XRANDR --fb ${FB_W}x${FB_H} | |
| # Determine positions based on --position | |
| if [[ "$POSITION" == "right" ]]; then | |
| # External on left, laptop on right | |
| EXT_POS="0x0" | |
| LAP_POS=$(awk "BEGIN {printf \"%d\", $EXT_W * $scaleX}")"x0" | |
| PRIMARY="$EXT" | |
| else | |
| # Laptop on left, external on right | |
| LAP_POS="0x0" | |
| EXT_POS=$(awk "BEGIN {printf \"%d\", $LAP_W}")"x0" | |
| PRIMARY="$LAPTOP" | |
| fi | |
| # Apply scaling and positioning | |
| $XRANDR --output "$EXT" --mode ${EXT_W}x${EXT_H} \ | |
| --scale ${scaleX}x${scaleY} --pos $EXT_POS --primary | |
| $XRANDR --output "$LAPTOP" --mode ${LAP_W}x${LAP_H} \ | |
| --scale 1x1 --pos $LAP_POS | |
| # DESABILITADO POR INSTABILIDADE DO DRIVER | |
| # if [[ "${NVIDIA}" != "" ]]; then | |
| # NVIDIA="${NVIDIA#*" :: "}" | |
| # nvidia-settings -a CurrentMetaMode="${NVIDIA//\}/, ForceFullCompositionPipeline=On\}}" | |
| # fi | |
| } | |
| only_one_monitor_commands() { | |
| gsettings set org.gnome.desktop.interface text-scaling-factor 0.97 | |
| gsettings set org.gnome.desktop.interface monospace-font-name 'SF Mono Powerline 10' | |
| gsettings set org.gnome.desktop.interface font-name 'SF Pro Display 10' | |
| gsettings set org.gnome.desktop.interface document-font-name 'SF Pro Display 10' | |
| gsettings set org.gnome.desktop.wm.preferences titlebar-font 'SF Pro Text Regular 10' | |
| gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 44 | |
| } | |
| check_hdmi() { | |
| if [ "$XDG_SESSION_TYPE" = "x11" ]; then | |
| if $XRANDR | awk '/ connected/ && !/eDP/{print $1}'; then | |
| second_monitor_commands && | |
| notify-send "Segundo monitor identificado!" "Configurações aplicadas automaticamente" | |
| else | |
| only_one_monitor_commands && | |
| notify-send "Único monitor identificado!" "Configurações aplicadas automaticamente" | |
| fi | |
| fi | |
| } | |
| # DESABILITADO POIS NÃO TEM UMA FORMA DE FAZER O MÉTODO NO WAYLAND | |
| # if [ $XDG_SESSION_TYPE == "wayland" ]; then | |
| # if $XRANDR | grep -q "XWAYLAND1 connected"; then | |
| # second_monitor_commands | |
| # else | |
| # only_one_monitor_commands | |
| # fi | |
| # fi | |
| check_hdmi | |
| # CASO FOSSE POSSÍVEL COLOCAR EM UM DAEMON ESSA FUNÇÃO VIGIARIA A MUDANÇA DE HDMI | |
| # udevadm monitor --udev --subsystem-match=drm | while read -r line; do | |
| # if echo "$line" | grep -q "change"; then | |
| # check_hdmi | |
| # fi | |
| # done | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
            
Correção ChatGPT
Não funcionou
Segunda correção