web-dev-qa-db-ja.com

Waylandでフォーカススティーリングを有効にすることは可能ですか? (Gnome Shell 3.26、Ubuntu 17.10)

Ubuntu 17.10でXOrgからWaylandに切り替えました。

私がNautilusにいて、テキストファイルをクリックするとします。以前は、自動的にgeditに切り替えられました(geditが既に開かれていても、ファイルをクリックするたびに)。

ウェイランドでは、ファイルを初めてクリックすると(geditを最初に開いたときに)発生しますが、その後は切り替わりません。 geditは、「blablabla.txtがgeditで準備完了です」という通知ポップアップなしで、単にバックグラウンドでテキストファイルを開きます。

XOrg gnome-Shellでは、 Steal My Focus (3.26のアップデートバージョンもあります here )をインストールできました。これらの拡張機能はどちらももう機能しないようです。

これらの拡張機能と同じことを行うgsettingもありました。

gsettings set org.gnome.desktop.wm.preferences focus-new-windows 'strict'

そして、それはもう機能しないようです。

これはWaylandに切り替えた直後に起こっているので、これはWaylandに関連していると推測しています。

誰もがウェイランドのもとで保護を盗むフォーカスを無効にすることに成功しました。そうでない場合、誰にもアイデアがありますか?提案?

2
thebunnyrules

まあ、このバグが私のマシンでのみ起こっているのか、それとももっと広範囲に起こっているのかはわからない。私は間違っている可能性がありますが、これはおそらく、アプリが既に開いているウィンドウにフォーカスできないようにするいくつかのウェイランドセキュリティ制限によるものと推測しています(ウィンドウマネージャがXのようなディスプレイサーバーではなく、これらのものを今すぐ処理するはずです)。これは過渡的な問題であり、gnomeが最終的にgeditに新しいタブにフォーカスする機能を与えると想定しています。

この修正を待っている間に、geditで新しいタブが開かれたときに通知を送信する部分的な修正を思いつきました。これはオートフォーカスの問題を解決するものではありませんが、少なくともウィンドウがまだ開いていない理由を不思議に思って2、3秒間座っていないように、少なくとも何らかの手がかりが得られます。

非ルートターミナルで、次のように入力します。

gedit admin:///usr/bin/gedit-notify

gedit-notifyで、次のスクリプトを貼り付けます。

#!/bin/bash
# purpose of this script: gedit under gnome Wayland has pretty messed up focusing and activation problems. First document/tab opened will focus normally but all the following ones open in the background without the traditional notification: "Your window is now read, click to focus". Its very distracting behavior because for the first 2 seconds you're wondering if your click was registered or not, if the app opened or not, etc. This script sends a notification every time you open a text file in the background. 

skip_list=true # you get notified but your notification list doesn't get spammed.

    gedit_inst=$(ps ax|grep " gedit "|wc -l)      #total number gedit windows + 1
    gedit_inst=$(expr $gedit_inst - 1)          #remove one from the count to account for the grep " gedit " process
    gedit_s=$(ps ax|grep " gedit -s"|wc -l)         # -s switch represents signle / independent instance for gedit. 
                                                # gedit_s represents the number of gedit windows running as 
                                                # independent instances + 1
    gedit_s=$(expr $gedit_s - 1)                # same logic as before
    gedit_inst=$(expr $gedit_inst - $gedit_s)   #substracts the # of windows running in independent instances 
                                #from total cound - because they don't affect the focus behavior. 
    if [ "$skip_list" = true ]; then
        n_arg0="--hint";n_arg1="int:transient:1"
    else
        n_arg0="-u";n_arg1="low"
    fi

    if [ "$gedit_inst" = 0 ]; then notify=false;fi 

n=0
while true; do
    n=$(expr $n + 1)
    file=$(eval echo \$$n)
    if ! [ -z "$file" ]; then 
        gedit "$file" &
        if [ -z "$err" -o "$err" = 0 ]; then 
                err="$?"
        fi
    else
        count=$(expr $n - 1) 
        if [ $count = 0 ]; then 
            if [ "$notify" != false ]; then notify-send $n_arg0 $n_arg1 "TEXT EDITOR is ready. Activate it manually.";fi
            gedit
        fi
        break; 
    fi          
done

if [ "$err" = 0 -a "$notify" != false ]; then 
    if [ $count -gt 1 ]; then
        notify-send $n_arg0 $n_arg1 "TEXT EDITOR is ready. Activate it manually." "$count files were opened."
    Elif [ $count = 1 ]; then
        notify-send $n_arg0 $n_arg1 "TEXT EDITOR is ready. Activate it manually." "file: \"$1\""
    fi
Elif [ "$err" != 0 ]; then
    notify-send -i error "TEXT EDITOR: I ran into some error(s) while opening your file(s)."
fi

save gedit-notifyを入力し、次を入力します。

cd /usr/bin
Sudo chmod +x gedit-notify; Sudo touch gedit-notify
gedit admin:///usr/share/applications/gedit-notify.desktop

gedit-notify.desktopに、次のコードを貼り付けます。

[Desktop Entry]
Name=Text Editor (Notify)
Comment=Edit text files
Exec=gedit-notify %U
Terminal=false
Type=Application
StartupNotify=true
Icon=gedit
Categories=GNOME;GTK;Utility;TextEditor;
X-GNOME-DocPath=gedit/gedit.xml
X-GNOME-FullName=Text Editor
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gedit
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=3.22.1
X-GNOME-Bugzilla-ExtraInfoScript=/usr/share/gedit/gedit-bugreport.sh
Actions=new-window;new-document;
Keywords=Text;Editor;Plaintext;Write;
X-Ubuntu-Gettext-Domain=gedit

X-AppStream-Ignore=true

[Desktop Action new-window]
Name=New Window
Exec=gedit --new-window

[Desktop Action new-document]
Name=New Document
Exec=gedit --new-document

これにより、デスクトップショートカットが作成され、ダッシュボードと[開く]メニューにテキストエディター(通知)として表示されます。 nautilusで、参照してテキストファイルを見つけ、右クリックして[プロパティ]を選択し、[アプリケーションから開く]タブをクリックして、[テキストエディター(通知)]を選択し、デフォルトに設定します。このプロセスを繰り返す必要があるテキストファイルには4種類または5種類あります。すすぎ、繰り返します。

0
thebunnyrules