고쳐 쓰다

고쳐 쓰다

최근에 X11(또는 일부 조합) 대신 Wayland를 사용하는 Ubuntu 17.10을 설치했습니다. 이전에는 xprop -root|grep ^_NET_CLIENT_LISTwmctrl() 또는 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

관련 정보