최근에 X11(또는 일부 조합) 대신 Wayland를 사용하는 Ubuntu 17.10을 설치했습니다. 이전에는 xprop -root|grep ^_NET_CLIENT_LIST
wmctrl() 또는 wmctrl( ) 을 사용하여 wmctrl -lpGxu
모든 활성 창 목록을 가져왔습니다. 이는 더 이상 모든 gnome 애플리케이션(예: 터미널) 및 기타 일부 애플리케이션(예: nautlius)에서 작동하지 않습니다. 이것들을 나열할 수 있는 방법이 있나요?
답변1
고쳐 쓰다
안타깝게도 이보안상의 이유로 더 이상 Gnome 41에서 작동하지 않습니다.
Looking Glass에서 실행하면 global.context.unsafe_mode = true
기능이 다시 활성화되지만 일시적으로만 가능합니다.
원래 답변
예, Wayland에서는 안타깝게도 Xorg 유틸리티가 작동 wmctrl
하지 않습니다 xdotool
. 대신 창 관리자와 대화할 수 있습니다.
Gnome의 경우 실행할 수 있습니다.gdbus
일부 GJS를 실행하기 위해 DBUS 메시지 보내기(GNOME C API용 JavaScript 바인딩).
클래스 및 제목이 포함된 창 목록을 얻으려면( 미화용으로 사용) sed
:jq
$ gdbus call \
--session \
--dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval "
global
.get_window_actors()
.map(a=>a.meta_window)
.map(w=>({class: w.get_wm_class(), title: w.get_title()}))" \
| sed -E -e "s/^\(\S+, '//" -e "s/'\)$//" \
| jq .
출력 예:
[
{
"class": "firefox",
"title": "Mozilla Firefox"
},
{
"class": "org.gnome.Nautilus",
"title": "Downloads"
},
{
"class": "Google-chrome",
"title": "ubuntu - Bash command to focus a specific window - Super User - Google Chrome"
},
{
"class": "sublime_text",
"title": "untitled (dotfiles) - Sublime Text"
},
{
"class": "gnome-terminal-server",
"title": "Projects"
},
{
"class": "Gnome-shell",
"title": "gnome-shell"
}
]
현재 초점이 맞춰진 창의 클래스를 얻으려면:
$ gdbus call \
--session \
--dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval "
global
.get_window_actors()
.map(a=>a.meta_window)
.find(w=>w.has_focus())
.get_wm_class()" \
| cut -d'"' -f 2
gnome-terminal-server
Gnome의 "Looking Glass" 디버거를 사용하여 GJS의 가능성을 시험해 볼 수 있습니다: Alt+F2를 누른 후 다음을 실행하세요.lg