Primer crearem l’archiu de l’script:
touch screen-sharing.sh
Despres entrarem dins d’ell
nano screen-sharing.sh
Dins tindrem que posar el seguent codi:
#!/bin/bash
# Configuración avanzada de pantalla con menú visual mejorado en Linux
# Definir colores ANSI
RED='\033[1;31m'
GREEN='\033[1;32m'
BLUE='\033[1;34m'
YELLOW='\033[1;33m'
CYAN='\033[1;36m'
MAGENTA='\033[1;35m'
WHITE='\033[1;37m'
NC='\033[0m' # Resetear color
# Directorio para guardar perfiles de configuración
PROFILES_DIR="$HOME/.config/display-profiles"
mkdir -p "$PROFILES_DIR"
# ===============================================
# FUNCIONES DE UTILIDAD Y COMPROBACIÓN
# ===============================================
# Función para verificar si un comando existe
command_exists () {
type "$1" &> /dev/null
}
# Verificar herramientas esenciales
check_dependencies() {
if ! command_exists xrandr; then
echo -e "${RED}ERROR: 'xrandr' no encontrado. Por favor, instala xorg-xrandr o x11-xserver-utils.${NC}"
exit 1
fi
if ! command_exists notify-send; then
echo -e "${YELLOW}ADVERTENCIA: 'notify-send' no encontrado. Las notificaciones de escritorio no funcionarán. (Instala libnotify-bin).${NC}"
# No salimos, solo advertimos
fi
if ! command_exists awk; then
echo -e "${RED}ERROR: 'awk' no encontrado. Este script lo necesita.${NC}"
exit 1
fi
}
# Función para obtener la salida principal conectada (la que no es virtual)
# Prioriza eDP (pantalla interna), luego toma la primera conectada no virtual.
get_primary_display_output() {
if xrandr | grep -q "eDP-1 connected"; then
echo "eDP-1"
return
fi
xrandr | grep " connected" | grep -v " disconnected" | awk '{print $1}' | head -n 1
}
# Función para seleccionar una pantalla de una lista
select_display_output() {
local outputs=()
local i=1
clear
echo -e "${YELLOW}Detectando pantallas conectadas...${NC}"
echo -e "${WHITE}-------------------------------${NC}"
while IFS= read -r line; do
outputs+=("$line")
echo -e "${CYAN}$i. ${line}${NC}"
i=$((i+1))
done < <(xrandr | grep " connected" | awk '{print $1}')
if [ ${#outputs[@]} -eq 0 ]; then
echo -e "${RED}❌ No se detectaron pantallas conectadas. Asegúrate de que estén físicamente conectadas.${NC}"
read -p "Presiona Enter para continuar..."
return 1
fi
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona el NÚMERO de la pantalla que deseas configurar: " selection
if [[ "$selection" -ge 1 && "$selection" -le ${#outputs[@]} ]]; then
echo "${outputs[$((selection-1))]}"
return 0
else
echo -e "${RED}❌ Selección no válida.${NC}"
read -p "Presiona Enter para continuar..."
return 1
fi
}
# Función para mostrar y seleccionar resoluciones disponibles
select_resolution() {
local output="$1"
local modes=()
local i=1
echo -e "${YELLOW}Resoluciones disponibles para ${output}:${NC}"
echo -e "${WHITE}-------------------------------${NC}"
# Obtener modos de xrandr, quitar duplicados y ordenar
while IFS= read -r line; do
modes+=("$line")
echo -e "${CYAN}$i. ${line}${NC}"
i=$((i+1))
done < <(xrandr | grep "^ " | grep -A 10 "$output" | awk '{print $1}' | grep -E '^[0-9]+x[0-9]+$' | sort -V | uniq)
if [ ${#modes[@]} -eq 0 ]; then
echo -e "${RED}❌ No se encontraron resoluciones para ${output}.${NC}"
read -p "Presiona Enter para continuar..."
return 1
fi
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona el NÚMERO de la resolución deseada: " selection
if [[ "$selection" -ge 1 && "$selection" -le ${#modes[@]} ]]; then
echo "${modes[$((selection-1))]}"
return 0
else
echo -e "${RED}❌ Selección no válida.${NC}"
read -p "Presiona Enter para continuar..."
return 1
fi
}
# Función para mostrar y seleccionar tasas de refresco disponibles
select_refresh_rate() {
local output="$1"
local rates=()
local i=1
echo -e "${YELLOW}Tasas de refresco disponibles para ${output}:${NC}"
echo -e "${WHITE}-------------------------------${NC}"
# Obtener tasas de refresco de xrandr
while IFS= read -r line; do
rates+=("$line")
echo -e "${CYAN}$i. ${line} Hz${NC}"
i=$((i+1))
done < <(xrandr | grep "^ " | grep -A 10 "$output" | awk '{print $NF}' | grep -E '^[0-9]+(\.[0-9]+)?\*?$' | sed 's/\*//g' | sort -g | uniq)
if [ ${#rates[@]} -eq 0 ]; then
echo -e "${RED}❌ No se encontraron tasas de refresco para ${output}.${NC}"
read -p "Presiona Enter para continuar..."
return 1
fi
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona el NÚMERO de la tasa de refresco deseada: " selection
if [[ "$selection" -ge 1 && "$selection" -le ${#rates[@]} ]]; then
echo "${rates[$((selection-1))]}"
return 0
else
echo -e "${RED}❌ Selección no válida.${NC}"
read -p "Presiona Enter para continuar..."
return 1
fi
}
# ===============================================
# CONFIGURACIÓN INICIAL DEL SCRIPT
# ===============================================
# 1. Crear el archivo .desktop global
DESKTOP_FILE="/usr/share/applications/configuracion-pantalla.desktop"
SCRIPT_PATH="/usr/local/bin/configuracion-pantalla.sh"
# Asegúrate de que el script principal esté en la ubicación deseada ANTES de crear el .desktop
# Esto es para cuando el script se ejecuta por primera vez y aún no se ha movido a /usr/local/bin
CURRENT_SCRIPT_LOCATION="$(readlink -f "$0")"
if [ "$CURRENT_SCRIPT_LOCATION" != "$SCRIPT_PATH" ]; then
echo -e "${YELLOW}INFO: Moviendo script a $SCRIPT_PATH para configuración inicial...${NC}"
sudo mkdir -p "$(dirname "$SCRIPT_PATH")"
sudo cp "$CURRENT_SCRIPT_LOCATION" "$SCRIPT_PATH"
sudo chmod +x "$SCRIPT_PATH"
echo -e "${GREEN}✅ Script movido y permisos establecidos.${NC}"
fi
cat <<EOF > "$DESKTOP_FILE"
[Desktop Entry]
Version=1.0
Type=Application
Name=Configuración de Pantalla
Comment=Administra la configuración y compartición de pantalla
Exec=$SCRIPT_PATH
Icon=display
Terminal=true
Categories=Settings;Utility;
EOF
sudo chmod +x "$DESKTOP_FILE"
echo -e "${GREEN}✅ Archivo .desktop global creado en $DESKTOP_FILE${NC}"
# 2. Copiar el .desktop al escritorio de usuarios nuevos
DESKTOP_DIR="/etc/skel/Desktop"
if [ ! -d "$DESKTOP_DIR" ]; then
DESKTOP_DIR="/etc/skel/Escritorio"
fi
sudo mkdir -p "$DESKTOP_DIR"
sudo cp "$DESKTOP_FILE" "$DESKTOP_DIR/configuracion-pantalla.desktop"
sudo chmod +x "$DESKTOP_DIR/configuracion-pantalla.desktop"
echo -e "${GREEN}✅ Archivo .desktop copiado en $DESKTOP_DIR (para nuevos usuarios)${NC}"
# 3. Copiar el acceso directo para usuarios existentes
for user_dir in /home/*; do
if [ -d "$user_dir" ]; then
USER_NAME=$(basename "$user_dir")
if [ -d "$user_dir/Desktop" ]; then
sudo cp "$DESKTOP_FILE" "$user_dir/Desktop/"
sudo chmod +x "$user_dir/Desktop/configuracion-pantalla.desktop"
echo -e "${GREEN}✅ Archivo .desktop copiado en $user_dir/Desktop${NC}"
elif [ -d "$user_dir/Escritorio" ]; then
sudo cp "$DESKTOP_FILE" "$user_dir/Escritorio/"
sudo chmod +x "$user_dir/Escritorio/configuracion-pantalla.desktop"
echo -e "${GREEN}✅ Archivo .desktop copiado en $user_dir/Escritorio${NC}"
fi
fi
done
# ===============================================
# FUNCIONES DE PERFILES DE CONFIGURACIÓN
# ===============================================
save_profile() {
clear
echo -e "${YELLOW}Descripción: Guarda la configuración actual de todas tus pantallas en un perfil.${NC}"
echo -e "${WHITE}Esto incluye resolución, brillo, rotación y disposición (duplicar/extender).${NC}"
read -p "Introduce un nombre para el perfil: " profile_name
if [ -z "$profile_name" ]; then
echo -e "${RED}❌ Nombre de perfil no puede estar vacío.${NC}"
sleep 2
return
fi
local profile_file="$PROFILES_DIR/$profile_name.sh" # Cambiado a .sh para que sea ejecutable
# Generar el contenido del script de perfil
echo "#!/bin/bash" > "$profile_file"
echo "# Perfil de pantalla: $profile_name" >> "$profile_file"
echo "# Generado el $(date)" >> "$profile_file"
echo "" >> "$profile_file"
# Comando para apagar todas las pantallas antes de aplicar la nueva configuración
echo "xrandr --current | grep ' connected' | awk '{print \$1}' | while read output; do xrandr --output \$output --off; done" >> "$profile_file"
echo "sleep 1" # Pequeña pausa para que los cambios se apliquen
# Obtener la configuración actual de todas las pantallas conectadas
# y construir los comandos xrandr para restaurarlas
xrandr | grep " connected" | while read -r line; do
output_name=$(echo "$line" | awk '{print $1}')
# Obtener los parámetros de configuración de xrandr para cada salida
# Esto es un poco más complejo ya que xrandr --query tiene un formato específico.
# Vamos a intentar construir el comando de la forma más fiable.
local current_config=$(xrandr --query | grep -A 1 "$output_name connected" | head -n 2)
local mode_info=$(echo "$current_config" | awk 'NR==2 {print $1}' | grep -E '^[0-9]+x[0-9]+$')
local rate_info=$(echo "$current_config" | awk 'NR==2 {print $2}' | sed 's/\*//g' | grep -E '^[0-9]+(\.[0-9]+)?$')
local command_parts="--output $output_name"
# Modo y tasa de refresco
if [ -n "$mode_info" ]; then
command_parts="$command_parts --mode $mode_info"
if [ -n "$rate_info" ]; then
command_parts="$command_parts --rate $rate_info"
fi
fi
# Posición (si está extendida)
if echo "$line" | grep -q '\-\-pos'; then
local pos=$(echo "$line" | grep -oP '\-\-pos [0-9]+x[0-9]+')
if [ -n "$pos" ]; then
command_parts="$command_parts $pos"
fi
fi
# Rotación
if echo "$line" | grep -q '\-\-rotate'; then
local rot=$(echo "$line" | grep -oP '\-\-rotate (normal|inverted|left|right)')
if [ -n "$rot" ]; then
command_parts="$command_parts $rot"
fi
fi
# Brillo
if echo "$line" | grep -q '\-\-brightness'; then
local brightness=$(echo "$line" | grep -oP '\-\-brightness [0-9]+\.?[0-9]*')
if [ -n "$brightness" ]; then
command_parts="$command_parts $brightness"
fi
fi
# Primaria
if echo "$line" | grep -q 'primary'; then
command_parts="$command_parts --primary"
fi
# Asegurarse de que la pantalla esté encendida por defecto al aplicar el perfil
command_parts="$command_parts --auto"
echo "xrandr $command_parts" >> "$profile_file"
done
# Asegurar que el script de perfil sea ejecutable
chmod +x "$profile_file"
echo -e "${GREEN}✅ Perfil '$profile_name' guardado en '$profile_file'.${NC}"
notify-send "💾 Perfil de pantalla guardado: $profile_name"
sleep 2
}
load_profile() {
clear
echo -e "${YELLOW}Descripción: Carga y aplica una configuración de pantalla previamente guardada.${NC}"
echo -e "${WHITE}Esto restaurará la resolución, brillo, rotación y disposición de tus pantallas.${NC}"
local profiles=()
local i=1
echo -e "${YELLOW}Perfiles de pantalla disponibles:${NC}"
echo -e "${WHITE}-------------------------------${NC}"
for file in "$PROFILES_DIR"/*.sh; do # Buscar .sh en lugar de .xrandr
if [ -f "$file" ]; then
profile=$(basename "$file" .sh)
profiles+=("$profile")
echo -e "${CYAN}$i. $profile${NC}"
i=$((i+1))
fi
done
if [ ${#profiles[@]} -eq 0 ]; then
echo -e "${RED}❌ No hay perfiles guardados.${NC}"
read -p "Presiona Enter para continuar..."
return
fi
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona el NÚMERO del perfil para cargar: " selection
if [[ "$selection" -ge 1 && "$selection" -le ${#profiles[@]} ]]; then
local profile_to_load="${profiles[$((selection-1))]}"
local profile_path="$PROFILES_DIR/$profile_to_load.sh"
echo -e "${YELLOW}Aplicando perfil '$profile_to_load'....${NC}"
bash "$profile_path" # Ejecuta el archivo de perfil como un script
notify-send "✅ Perfil de pantalla cargado: $profile_to_load"
echo -e "${GREEN}✅ Perfil '$profile_to_load' cargado.${NC}"
else
echo -e "${RED}❌ Selección no válida.${NC}"
fi
read -p "Presiona Enter para continuar..."
}
delete_profile() {
clear
echo -e "${YELLOW}Descripción: Elimina un perfil de configuración de pantalla guardado.${NC}"
echo -e "${WHITE}Una vez eliminado, no podrás restaurar esa configuración fácilmente.${NC}"
local profiles=()
local i=1
echo -e "${YELLOW}Perfiles de pantalla disponibles para eliminar:${NC}"
echo -e "${WHITE}-------------------------------${NC}"
for file in "$PROFILES_DIR"/*.sh; do # Buscar .sh en lugar de .xrandr
if [ -f "$file" ]; then
profile=$(basename "$file" .sh)
profiles+=("$profile")
echo -e "${CYAN}$i. $profile${NC}"
i=$((i+1))
fi
done
if [ ${#profiles[@]} -eq 0 ]; then
echo -e "${RED}❌ No hay perfiles guardados para eliminar.${NC}"
read -p "Presiona Enter para continuar..."
return
fi
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona el NÚMERO del perfil para eliminar: " selection
if [[ "$selection" -ge 1 && "$selection" -le ${#profiles[@]} ]]; then
local profile_to_delete="${profiles[$((selection-1))]}"
rm "$PROFILES_DIR/$profile_to_delete.sh" # Eliminar .sh
echo -e "${GREEN}✅ Perfil '$profile_to_delete' eliminado.${NC}"
notify-send "🗑️ Perfil de pantalla eliminado: $profile_to_delete"
else
echo -e "${RED}❌ Selección no válida.${NC}"
fi
read -p "Presiona Enter para continuar..."
}
# ===============================================
# MENÚ PRINCIPAL Y SUBMENÚS
# ===============================================
# Verificar dependencias al inicio del script
check_dependencies
# Menú principal
while true; do
clear
echo -e "${CYAN}🔧 Menú Principal de Configuración de Pantalla${NC}"
echo -e "${WHITE}-------------------------------${NC}"
echo -e "${GREEN}1. ⚙️ Configuración de Pantalla (Resolución, Brillo, Rotación, Refresco)${NC}"
echo " Permite ajustar las propiedades individuales de una pantalla seleccionada."
echo -e "${BLUE}2. 📡 Compartición de Pantalla (Duplicar, Extender, Solo)${NC}"
echo " Controla cómo se muestran tus pantallas, ideal para presentaciones o multi-monitor."
echo -e "${MAGENTA}3. 💾 Perfiles de Configuración (Guardar/Cargar/Eliminar)${NC}"
echo " Guarda y restaura tus configuraciones de pantalla favoritas con facilidad."
echo -e "${YELLOW}4. 🚀 Configurar al Inicio de Sesión${NC}"
echo " Define una configuración de pantalla para que se aplique automáticamente al iniciar tu sesión."
echo -e "${RED}5. ❌ Salir${NC}"
echo " Cierra esta herramienta."
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona una opción: " main_option
case $main_option in
1) # Menú de configuración de pantalla
while true; do
clear
echo -e "${GREEN}⚙️ Configuración de Pantalla Individual${NC}"
echo -e "${WHITE}-------------------------------${NC}"
echo "Aquí puedes ajustar las propiedades de una pantalla específica."
echo -e "${CYAN}1. 🎚️ Modificar resolución${NC}"
echo -e "${YELLOW}2. 🌅 Ajustar brillo${NC}"
echo -e "${BLUE}3. 🔄 Rotar pantalla${NC}"
echo -e "${MAGENTA}4. 🏳️ Cambiar tasa de refresco${NC}"
echo -e "${RED}5. ↩️ Volver al menú principal${NC}"
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona una opción: " config_option
case $config_option in
1) # Modificar resolución
clear
echo -e "${CYAN}--- Modificar Resolución ---${NC}"
echo "Descripción: Cambia el tamaño y la claridad de la imagen en la pantalla seleccionada."
echo "Instrucciones: Primero, selecciona la pantalla de la lista numerada."
echo " Luego, selecciona la resolución deseada de la nueva lista numerada."
echo -e "${WHITE}-------------------------------${NC}"
SELECTED_OUTPUT=$(select_display_output)
if [ $? -ne 0 ]; then continue; fi # Si falla la selección de pantalla
SELECTED_RESOLUTION=$(select_resolution "$SELECTED_OUTPUT")
if [ $? -ne 0 ]; then continue; fi # Si falla la selección de resolución
xrandr --output "$SELECTED_OUTPUT" --mode "$SELECTED_RESOLUTION"
notify-send "🎚️ Resolución cambiada en $SELECTED_OUTPUT a $SELECTED_RESOLUTION"
sleep 2
;;
2) # Ajustar brillo
clear
echo -e "${YELLOW}--- Ajustar Brillo ---${NC}"
echo "Descripción: Controla la intensidad de la luz emitida por la pantalla."
echo "Instrucciones: Primero, selecciona la pantalla de la lista numerada."
echo " Luego, introduce un valor numérico para el brillo."
echo " Ejemplo: '1.0' para brillo normal (100%), '0.5' para 50%, '0.2' para 20%."
echo -e "${WHITE}-------------------------------${NC}"
SELECTED_OUTPUT=$(select_display_output)
if [ $? -ne 0 ]; then continue; fi
read -p "Introduce el nivel de brillo (Ejemplo: 0.5 para 50%): " brightness
if ! [[ "$brightness" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
echo -e "${RED}❌ Brillo no válido. Usa un número (ej. 0.8).${NC}"
sleep 2; continue
fi
xrandr --output "$SELECTED_OUTPUT" --brightness "$brightness"
notify-send "🌅 Brillo ajustado en $SELECTED_OUTPUT a $brightness"
sleep 2
;;
3) # Rotar pantalla
clear
echo -e "${BLUE}--- Rotar Pantalla ---${NC}"
echo "Descripción: Gira la orientación de la pantalla."
echo "Instrucciones: Primero, selecciona la pantalla de la lista numerada."
echo " Luego, introduce una de las siguientes palabras para la rotación:"
echo " - 'normal': Orientación estándar (0 grados)."
echo " - 'inverted': Pantalla rotada 180 grados."
echo " - 'left': Pantalla rotada 90 grados a la izquierda (en sentido antihorario)."
echo " - 'right': Pantalla rotada 90 grados a la derecha (en sentido horario)."
echo -e "${WHITE}-------------------------------${NC}"
SELECTED_OUTPUT=$(select_display_output)
if [ $? -ne 0 ]; then continue; fi
read -p "Introduce el ángulo de rotación (normal, inverted, left, right): " rotation
case "$rotation" in
normal|inverted|left|right)
xrandr --output "$SELECTED_OUTPUT" --rotate "$rotation"
notify-send "🔄 Pantalla $SELECTED_OUTPUT rotada: $rotation"
;;
*) echo -e "${RED}❌ Rotación no válida. Usa 'normal', 'inverted', 'left' o 'right'.${NC}" ;;
esac
sleep 2
;;
4) # Cambiar tasa de refresco
clear
echo -e "${MAGENTA}--- Cambiar Tasa de Refresco ---${NC}"
echo "Descripción: Ajusta la suavidad del movimiento en la pantalla (medido en Herzios - Hz)."
echo "Instrucciones: Primero, selecciona la pantalla de la lista numerada."
echo " Luego, selecciona la tasa de refresco deseada de la nueva lista numerada."
echo -e "${WHITE}-------------------------------${NC}"
SELECTED_OUTPUT=$(select_display_output)
if [ $? -ne 0 ]; then continue; fi
SELECTED_RATE=$(select_refresh_rate "$SELECTED_OUTPUT")
if [ $? -ne 0 ]; then continue; fi
xrandr --output "$SELECTED_OUTPUT" --rate "$SELECTED_RATE"
notify-send "🏳️ Tasa de refresco de $SELECTED_OUTPUT cambiada a $SELECTED_RATE Hz"
sleep 2
;;
5) break ;;
*) echo -e "${RED}❌ Opción no válida, intenta de nuevo.${NC}" ;;
esac # FIN DE CASE DE OPCIONES DE CONFIGURACIÓN
done
;;
2) # Menú de compartición de pantalla
while true; do
clear
echo -e "${BLUE}📡 Compartición de Pantalla${NC}"
echo -e "${WHITE}-------------------------------${NC}"
echo "Estas opciones te permiten gestionar cómo se muestran tus pantallas, ideal para trabajar con múltiples monitores o realizar presentaciones."
echo -e "${CYAN}📺 Modos de visualización${NC}"
echo -e "${GREEN}1. 🔵 Duplicar pantalla (primaria y secundaria)${NC}"
echo " Muestra el mismo contenido en ambas pantallas. Útil para proyectores o compartir lo que ves."
echo -e "${GREEN}2. 🟢 Pantalla extendida (primaria y secundaria)${NC}"
echo " Extiende tu escritorio a una segunda pantalla, dándote más espacio de trabajo."
echo -e "${YELLOW}3. 📽️ Solo pantalla secundaria${NC}"
echo " Desactiva la pantalla principal y utiliza solo la secundaria. Ideal para presentaciones."
echo -e "${YELLOW}4. 🖥️ Solo pantalla primaria${NC}"
echo " Desactiva las pantallas secundarias y utiliza solo la principal."
echo -e "${MAGENTA}5. 📊 Modo presentación (ej. apagar otras pantallas, notificaciones)${NC}"
echo " Activa un modo optimizado para presentaciones (puede requerir configuración adicional)."
echo -e "${WHITE}-------------------------------${NC}"
echo -e "${CYAN}🌍 Opciones de transmisión/servicios${NC}"
echo -e "${BLUE}6. 🔗 Compartir pantalla en red (Requiere VNC/RDP)${NC}"
echo " Habilita la compartición de tu escritorio a través de la red para que otros usuarios puedan verlo o controlarlo de forma remota."
echo -e "${BLUE}7. 🎥 Activar transmisión a otro dispositivo (Requiere software adicional)${NC}"
echo " Prepara tu sistema para enviar la pantalla a dispositivos como Smart TVs o dongles de streaming."
echo -e "${BLUE}8. 💡 Alternar DPMS (Standby/Suspend/Off)${NC}"
echo " Controla el estado de ahorro de energía de tus pantallas."
echo -e "${RED}9. ↩️ Volver al menú principal${NC}"
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona una opción: " share_option
PRIMARY_OUTPUT=$(get_primary_display_output)
SECONDARY_OUTPUT=$(xrandr | grep " connected" | awk '{if ($1 != "'"$PRIMARY_OUTPUT"'") print $1;}' | head -n 1)
if [ -z "$PRIMARY_OUTPUT" ]; then
echo -e "${RED}❌ No se detectó una pantalla principal conectada. Asegúrate de tener al menos una pantalla conectada.${NC}"
sleep 3
continue
fi
case $share_option in
1) # Duplicar pantalla
clear
echo -e "${BLUE}--- Duplicar Pantalla ---${NC}"
echo "Descripción: Muestra el mismo contenido en tu pantalla principal y una secundaria."
echo "Instrucciones: Esta opción se aplica automáticamente si detecta una pantalla secundaria."
echo -e "${WHITE}-------------------------------${NC}"
if [ -n "$SECONDARY_OUTPUT" ]; then
xrandr --output "$SECONDARY_OUTPUT" --same-as "$PRIMARY_OUTPUT" --auto
notify-send "🔵 Pantalla duplicada: $PRIMARY_OUTPUT y $SECONDARY_OUTPUT"
else
echo -e "${RED}❌ No se detectó una pantalla secundaria para duplicar.${NC}"
fi ;;
2) # Pantalla extendida
clear
echo -e "${GREEN}--- Pantalla Extendida ---${NC}"
echo "Descripción: Extiende tu escritorio a una segunda pantalla, dándote más espacio de trabajo."
echo "Instrucciones: El sistema extenderá automáticamente la pantalla secundaria a la derecha de la principal."
echo -e "${WHITE}-------------------------------${NC}"
if [ -n "$SECONDARY_OUTPUT" ]; then
xrandr --output "$SECONDARY_OUTPUT" --right-of "$PRIMARY_OUTPUT" --auto
notify-send "🟢 Pantalla extendida: $PRIMARY_OUTPUT y $SECONDARY_OUTPUT"
else
echo -e "${RED}❌ No se detectó una pantalla secundaria para extender.${NC}"
fi ;;
3) # Solo pantalla secundaria
clear
echo -e "${YELLOW}--- Solo Pantalla Secundaria ---${NC}"
echo "Descripción: Desactiva la pantalla principal y utiliza solo la secundaria. Útil para proyectores."
echo "Instrucciones: Si hay una pantalla secundaria conectada, se activará como principal y la otra se apagará."
echo -e "${WHITE}-------------------------------${NC}"
if [ -n "$SECONDARY_OUTPUT" ]; then
xrandr --output "$PRIMARY_OUTPUT" --off
xrandr --output "$SECONDARY_OUTPUT" --primary --auto
notify-send "📽️ Solo pantalla secundaria activada: $SECONDARY_OUTPUT"
else
echo -e "${RED}❌ No se detectó una pantalla secundaria para activar.${NC}"
fi ;;
4) # Solo pantalla primaria
clear
echo -e "${YELLOW}--- Solo Pantalla Primaria ---${NC}"
echo "Descripción: Desactiva todas las pantallas secundarias y utiliza solo la principal."
echo "Instrucciones: Esta opción se aplica automáticamente, apagando cualquier otra pantalla conectada."
echo -e "${WHITE}-------------------------------${NC}"
if [ -n "$PRIMARY_OUTPUT" ]; then
xrandr --output "$PRIMARY_OUTPUT" --primary --auto
xrandr | grep " connected" | awk '{print $1}' | while read output; do
if [ "$output" != "$PRIMARY_OUTPUT" ]; then
xrandr --output "$output" --off
fi
done
notify-send "🖥️ Solo pantalla primaria activada: $PRIMARY_OUTPUT"
else
echo -e "${RED}❌ No se detectó una pantalla primaria para activar.${NC}"
fi ;;
5) # Modo presentación
clear
echo -e "${MAGENTA}--- Modo Presentación ---${NC}"
echo "Descripción: Activa un modo optimizado para presentaciones."
echo "Instrucciones: Actualmente, esta opción solo muestra una notificación."
echo " Puedes expandirla manualmente en el script para, por ejemplo, deshabilitar el salvapantallas o las notificaciones del sistema durante una presentación."
echo -e "${WHITE}-------------------------------${NC}"
notify-send "📊 Modo presentación activado (Funcionalidad avanzada pendiente: Por ejemplo, puedes agregar aquí comandos para deshabilitar el salvapantallas, las notificaciones de escritorio, etc.)"
# Ejemplo: xset dpms force off (para apagar la pantalla) o configurar un fondo de escritorio específico.
# Para deshabilitar salvapantallas temporalmente: xset s off && xset -dpms
;;
6) # Compartir pantalla en red
clear
echo -e "${BLUE}--- Compartir Pantalla en Red ---${NC}"
echo "Descripción: Habilita la compartición de tu escritorio a través de la red."
echo "Instrucciones: Esta función requiere un servidor VNC/RDP (ej. 'x11vnc' o 'vino-server') instalado y configurado en tu sistema. Este script solo te informa al respecto."
echo -e "${WHITE}-------------------------------${NC}"
notify-send "🔗 Compartición de pantalla en red: Esta función requiere un servidor VNC/RDP (ej. 'x11vnc' o 'vino-server') para compartir tu escritorio en la red. ¡Instálalo y configúralo!"
;;
7) # Activar transmisión a otro dispositivo
clear
echo -e "${BLUE}--- Activar Transmisión ---${NC}"
echo "Descripción: Prepara tu sistema para enviar la pantalla a dispositivos externos como Smart TVs o dongles de streaming."
echo "Instrucciones: Esta función requiere software de streaming adicional (como FFmpeg, GStreamer, o herramientas para Miracast/Chromecast). Este script solo te informa al respecto."
echo -e "${WHITE}-------------------------------${NC}"
notify-send "🎥 Transmisión a otro dispositivo: Esta función requiere software de streaming como FFmpeg, GStreamer, o herramientas para Miracast/Chromecast. ¡Instálalo y configúralo!"
;;
8) # Alternar DPMS
clear
echo -e "${BLUE}--- Alternar DPMS (Display Power Management Signaling) ---${NC}"
echo "Descripción: DPMS permite controlar el estado de ahorro de energía de tus pantallas (Standby, Suspend, Off)."
echo "Instrucciones: Selecciona la opción deseada para aplicar el modo de ahorro de energía."
echo -e "${WHITE}-------------------------------${NC}"
echo -e "${CYAN}1. Standby (ahorro de energía moderado)${NC}"
echo -e "${CYAN}2. Suspend (ahorro de energía significativo)${NC}"
echo -e "${CYAN}3. Off (apagar pantalla)${NC}"
echo -e "${RED}4. Volver${NC}"
read -p "Selecciona una opción DPMS: " dpms_option
case $dpms_option in
1) xset dpms force standby; notify-send "💡 DPMS: Pantalla en Standby.";;
2) xset dpms force suspend; notify-send "💡 DPMS: Pantalla en Suspend.";;
3) xset dpms force off; notify-send "💡 DPMS: Pantalla apagada.";;
4) ;;
*) echo -e "${RED}❌ Opción DPMS no válida.${NC}";;
esac
;;
9) break ;;
*) echo -e "${RED}❌ Opción no válida, intenta de nuevo.${NC}" ;;
esac
sleep 2
done
;;
3) # Menú de perfiles de configuración
while true; do
clear
echo -e "${MAGENTA}💾 Perfiles de Configuración${NC}"
echo -e "${WHITE}-------------------------------${NC}"
echo "Gestiona tus configuraciones de pantalla guardadas para aplicarlas rápidamente cuando las necesites."
echo -e "${GREEN}1. Guardar configuración actual${NC}"
echo -e "${BLUE}2. Cargar perfil guardado${NC}"
echo -e "${RED}3. Eliminar perfil${NC}"
echo -e "${YELLOW}4. ↩️ Volver al menú principal${NC}"
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona una opción: " profile_option
case $profile_option in
1)
clear
echo -e "${GREEN}--- Guardar Configuración Actual ---${NC}"
echo "Descripción: Crea un nuevo perfil basado en la configuración actual de tus pantallas."
echo "Instrucciones: Introduce un nombre único para tu nuevo perfil."
echo -e "${WHITE}-------------------------------${NC}"
save_profile ;;
2)
clear
echo -e "${BLUE}--- Cargar Perfil Guardado ---${NC}"
echo "Descripción: Aplica una configuración de pantalla guardada anteriormente."
echo "Instrucciones: Se te presentará una lista numerada de tus perfiles. Introduce el número del perfil que deseas cargar."
echo -e "${WHITE}-------------------------------${NC}"
load_profile ;;
3)
clear
echo -e "${RED}--- Eliminar Perfil ---${NC}"
echo "Descripción: Borra un perfil de configuración que ya no necesites."
echo "Instrucciones: Se te presentará una lista numerada de tus perfiles. Introduce el número del perfil que deseas eliminar."
echo -e "${WHITE}-------------------------------${NC}"
delete_profile ;;
4) break ;;
*) echo -e "${RED}❌ Opción no válida, intenta de nuevo.${NC}" ;;
esac
sleep 2
done
;;
4) # Configurar al inicio de sesión
clear
echo -e "${YELLOW}🚀 Configuración al Inicio de Sesión${NC}"
echo -e "${WHITE}-------------------------------${NC}"
echo "Esta opción permite que tu configuración de pantalla se aplique automáticamente al iniciar sesión."
echo "Para ello, se creará un archivo de autoinicio en tu directorio de usuario."
echo -e "${WHITE}-------------------------------${NC}"
echo -e "${GREEN}1. Establecer configuración al inicio${NC}"
echo -e "${RED}2. Deshabilitar configuración al inicio${NC}"
echo -e "${YELLOW}3. ↩️ Volver al menú principal${NC}"
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona una opción: " autostart_option
case $autostart_option in
1)
clear
echo -e "${GREEN}--- Establecer Configuración al Inicio ---${NC}"
echo "Descripción: Configura el script para aplicar un perfil de pantalla (o una configuración por defecto) cada vez que inicies sesión."
echo "Instrucciones: A continuación, se te preguntará si quieres aplicar un perfil guardado o simplemente usar la configuración predeterminada del sistema."
echo -e "${WHITE}-------------------------------${NC}"
AUTORUN_SCRIPT="$HOME/.config/autostart/display_autostart.desktop"
echo -e "${YELLOW}Elige la configuración a aplicar al inicio de sesión:${NC}"
echo -e "${CYAN}1. Aplicar un perfil guardado.${NC}"
echo " Selecciona uno de tus perfiles existentes para cargar al inicio."
echo -e "${CYAN}2. No aplicar ningún perfil (usar la configuración predeterminada o la última manual).${NC}"
echo " El sistema operativo gestionará la configuración de pantalla al inicio, sin cargar un perfil específico de este script."
read -p "Selecciona una opción: " profile_autostart_choice
local AUTORUN_COMMAND=""
case $profile_autostart_choice in
1)
# Permite al usuario seleccionar un perfil existente para el inicio
local profiles_autostart=()
local i=1
echo -e "${YELLOW}Perfiles disponibles para aplicar al inicio:${NC}"
for file in "$PROFILES_DIR"/*.sh; do
if [ -f "$file" ]; then
profile=$(basename "$file" .sh)
profiles_autostart+=("$profile")
echo -e "${CYAN}$i. $profile${NC}"
i=$((i+1))
# Muestra las descripciones de los perfiles si fuera necesario
# (Podrías añadir un comentario al perfil en save_profile para mostrarlo aquí)
fi
done
if [ ${#profiles_autostart[@]} -eq 0 ]; then
echo -e "${RED}❌ No hay perfiles guardados. No se puede configurar el inicio automático con un perfil.${NC}"
notify-send "❌ Fallo al configurar inicio: No hay perfiles."
sleep 3
continue
fi
echo -e "${WHITE}-------------------------------${NC}"
read -p "Selecciona el NÚMERO del perfil a cargar al inicio: " autostart_profile_num
if [[ "$autostart_profile_num" -ge 1 && "$autostart_profile_num" -le ${#profiles_autostart[@]} ]]; then
selected_autostart_profile="${profiles_autostart[$((autostart_profile_num-1))]}"
AUTORUN_COMMAND="bash $PROFILES_DIR/$selected_autostart_profile.sh"
echo -e "${GREEN}✅ Se configurará el perfil '$selected_autostart_profile' al inicio.${NC}"
else
echo -e "${RED}❌ Selección de perfil no válida. No se configurará el inicio automático con perfil.${NC}"
notify-send "❌ Fallo al configurar inicio: Perfil no válido."
sleep 3
continue
fi
;;
2)
AUTORUN_COMMAND="echo 'No se aplica ningún perfil específico al inicio de sesión por este script.'" # Un comando que no hace nada visual, solo para que el .desktop sea válido
echo -e "${YELLOW}Se usará la configuración por defecto o la última aplicada manualmente al inicio.${NC}"
;;
*)
echo -e "${RED}❌ Opción no válida. Volviendo al menú anterior.${NC}"
sleep 2
continue
;;
esac
mkdir -p "$(dirname "$AUTORUN_SCRIPT")"
cat <<EOF > "$AUTORUN_SCRIPT"
[Desktop Entry]
Type=Application
Exec=$AUTORUN_COMMAND
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[es_ES]=Configuración de Pantalla al Inicio
Comment[es_ES]=Aplica la configuración de pantalla al inicio de sesión
EOF
chmod +x "$AUTORUN_SCRIPT"
notify-send "🚀 Configuración de pantalla habilitada al inicio de sesión."
echo -e "${GREEN}✅ Configuración habilitada al inicio de sesión. (Archivo: $AUTORUN_SCRIPT)${NC}"
;;
2)
clear
echo -e "${RED}--- Deshabilitar Configuración al Inicio ---${NC}"
echo "Descripción: Elimina la configuración de autoinicio para que las pantallas no se ajusten automáticamente al iniciar sesión."
echo "Instrucciones: No se requiere entrada adicional. La acción se realizará inmediatamente si existe una configuración previa."
echo -e "${WHITE}-------------------------------${NC}"
if [ -f "$HOME/.config/autostart/display_autostart.desktop" ]; then
rm "$HOME/.config/autostart/display_autostart.desktop"
notify-send "⛔ Configuración de pantalla deshabilitada al inicio."
echo -e "${GREEN}✅ Configuración deshabilitada al inicio de sesión.${NC}"
else
echo -e "${YELLOW}ℹ️ No hay configuración de inicio de sesión activa para deshabilitar.${NC}"
fi
;;
3) break ;;
*) echo -e "${RED}❌ Opción no válida, intenta de nuevo.${NC}" ;;
esac
sleep 2
;;
5) echo -e "${RED}Saliendo... ¡Hasta pronto!${NC}"; exit ;;
*) echo -e "${RED}❌ Opción no válida, intenta de nuevo.${NC}" ;;
esac
sleep 2
done

Despres de crear l’script tindrem que donar’li permisos:
chmod +x screen-sharing.sh
A continuacio tindrem que executar l’script per que es crei el .desktop:
./screen-sharing.sh
