elsa in mac

mac:Fedora-Asahi Remix, Hyprland 재 로그인 시 socket 연결 오류가 발생하는 경우 해결 방법 본문

Mac(OS X)/Asahi Linux

mac:Fedora-Asahi Remix, Hyprland 재 로그인 시 socket 연결 오류가 발생하는 경우 해결 방법

elsa in mac 2024. 3. 27. 19:59

이번 포스트는 Hyprland를 사용할 때, logout/login 한 후, hyprland socket에 연결할 수 없는 문제와 관련된 것입니다. 
SDDM을 통해 Hyprland WM으로 login을 하게 되면, hyprland는 /tmp/hypr/ 폴더에 socket을 생성합니다. 이 후, hyprctl 을 사용할 때 이 socket을 사용하여 정보를 얻어오거나 설정을 하게 되는데, 재 로그인을 하게 되면 이 후로 socket 에 연결할 수 없다는 오류가 발생하게 됩니다.  

$ hyprctl monitors
Couldn't connect to /tmp/hypr/c554749244117f7f150c6f2a2ce4dede6e8cbb25_16931751828.socket.sock. (3)

가장 대표적인 예가 tmux를 사용하는 경우 입니다. tmux의 경우에는 가장 최근에 설정된 export 환경번수 정보를 기준으로 실행되기 때문에, 새롭게 생생된 socket 이름과 mismatch가 발생하게 됩니다.  

이와 같은 문제를 해결하기 위해서는 Hyprland가 실행된 이후, 환경변수 정보들을 tmux 상의 최신정보로 갱신해 주는 작업을 해줘야 합니다. 
환경변수 재 설정 shell script
~/.config/ 밑에 import_new_env 라는 파일을 하나 만들고 실행 권환을 설정해 줍니다. 

cd ~/.config
touch import_new_env
chmod +x import_new_env

Editor로 import_new_env 파일을 열고, 아래와 같이 shell script code를 넣어 줍니다.  아래 정의된 환경변수 이 외에 갱신되어야할 별도의 다른 변수가 있다면 추가해 줍니다. 

#!/usr/bin/env bash

set -e

[[ -n $HYPRLAND_DEBUG_CONF ]] && exit 0

_envs=(
	WAYLAND_DISPLAY
	DISPLAY
	XCURSOR_SIZE
	USERNAME
	XDG_BACKEND
	XDG_CURRENT_DESKTOP
	XDG_SESSION_TYPE
	XDG_SESSION_ID
	XDG_SESSION_CLASS
	XDG_SESSION_DESKTOP
	XDG_SEAT
	XDG_VTNR
	# sway
	SWAYSOCK
	# hyprland
	HYPRLAND_CMD
	HYPRLAND_INSTANCE_SIGNATURE
	# toolkit
	_JAVA_AWT_WM_NONREPARENTING
	QT_QPA_PLATFORM
	QT_WAYLAND_DISABLE_WINDOWDECORATION
	GRIM_DEFAULT_DIR
	# ssh
	SSH_AUTH_SOCK
)

for v in "${_envs[@]}"; do
	if [[ -n ${!v} ]]; then
		tmux setenv -g "$v" "${!v}"
	fi
done

마지막으로 hyprland 설정 파일에서 가장 먼저 import_new_env가 실행되도록 exec-once를 정의해 줍니다. 

# 가장 먼저 실행
exec-once = ~/.config/import_new_env

위의 스크립트가 별로 의미가 없다면.. 아래와 같이 HYPRLAND_INSTANCE_SIGNATURE만 설정 해주면 됩니다. 

exec-once = tmux setenv -g HYPRLAND_INSTANCE_SIGNATURE "$HYPRLAND_INSTANCE_SIGNATURE"

logout을 한 후, 다시 login을 하게 되면, import_new_env가 실행되면서 tmux 환경변수를 최신 환경변수 값들로 갱신하게 되므로, hyprctl 이나 pypr 같은 도구를 사용할 때 socket에 연결할 수 없다는 오류가 발생하는 것을 방지할 수 있게 됩니다. 

공유하기 링크
Comments