web-dev-qa-db-ja.com

Ubuntu 16.04でアプリケーションが常に3番目の位置に表示される

Ubutuを16.04に更新した後、Unityランチャーで問題が発生しました。ランチャーにリストされていないアプリケーションを開くたびに、最後の位置ではなく3番目の位置になります。誰にも同じ問題がありますか?

enter image description here

5
Jared Chu

ランチャーのお気に入りに常に存在し、ピン留めされていない実行中のアプリのアイコンが表示される位置を決定する「Running Apps」という特別な非表示のランチャーアイテムがあります。あなたの場合、それは明らかに何らかの形で奇妙な位置に達しましたが、簡単に修正できます。

簡単な方法と、もちろんオタクなコマンドラインの方法の2つの方法があります;-)


簡単に覚えてほしい!

最も簡単な方法は、ランチャーアイコンを正しい順序でドラッグアンドドロップすることです。

したがって、スクリーンショットの外観設定のように、ランチャーに固定されていないアプリケーションを1つ開きます。固定しないでください。そうしないと機能しません。

次に、固定されていないアイコンをドラッグしない。特別な「アプリの実行」アイテムの位置には影響せず、ドラッグしたアイコンを新しい場所に固定するだけです。
代わりに、ピンを外したアイコンの下/右(両方のランチャーの向きに対応)からすべてのアイコンをその真上/左にドラッグします。そのようにすると、固定されていないアイコンに触れることなく、下/右に移動します。

固定されていないすべてのアプリケーションアイコンを表示する位置に到達したら、完了です。このウィンドウを閉じて、もう一度開くか、新しいウィンドウを開いて、動作することをテストできます。


今日はオタク気分です、ターミナルでハックしましょう!

ピン留めされたランチャーアイテムは「お気に入り」と呼ばれ、dconf設定としてユーザープロファイルに保存されます。ターミナルを開いて実行すると、お気に入りのリストを見ることができます

gsettings get com.canonical.Unity.Launcher favorites

これは次の例のようになります(私が追加した出力フォーマット)。

$ gsettings get com.canonical.Unity.Launcher favorites
['application://gnome-terminal.desktop', 
 'application://org.gnome.Nautilus.desktop', 
 'application://firefox.desktop', 
 'unity://running-apps', 
 'unity://desktop-icon',
 'unity://devices']

この出力は、ターミナル、Nautilus、およびFirefoxアイコンが固定された最小限のランチャーを表しています。次のアイテムは'unity://running-apps'です。これは、すべての固定されていない実行中のアプリケーションのアイコンのプレースホルダーとして機能する重要な特別なアイテムです。その後、さらに特別な項目、つまり「デスクトップの表示」アイコンと、接続されたリムーバブルデバイスのアイコンが表示される場所を定義する別のプレースホルダー項目があります。

私たちにとって興味深い唯一のアイテムは、「Running Apps」アイテムです。問題を修正するには、アイテムのリスト内の目的の位置に問題を移動する必要があります。

これを行うには、コマンドを入力します

gsettings set com.canonical.Unity.Launcher favorites []

しかし、空のリスト[]の代わりに、もちろんyour modified listを最後の引数として渡す必要があります。

たとえば、上記のランチャーの場合、実行中のアプリのアイコンを[デスクトップの表示]の下に表示され、デバイスのアイコンの上に表示するには、次を実行します。

$ gsettings set com.canonical.Unity.Launcher favorites "['application://gnome-terminal.desktop', 'application://org.gnome.Nautilus.desktop', 'application://firefox.desktop', 'unity://desktop-icon', 'unity://running-apps', 'unity://devices']"

変更はすぐに有効になるので、いくつかの固定されていないアプリケーションを起動して、アイテムを正しい位置に置いて楽しんでいることを確認します。

7
Byte Commander

ByteCommanderが適切に説明したように、unity://running-apps gsettingsスキーマのリスト内のcom.canonical.Unity.Launcher位置は、実行中のアプリが表示される場所に影響するため、彼の答えはすぐにわかります。これを実証してテストするために、小さなスクリプトを作成しました。その結果は、以下のスクリーンショットで確認できます。

インデックス1およびインデックス2で呼び出されたスクリプトが、2つのターミナルアプリが一緒にランチャーのそれぞれの位置に移動することを示していることに注意してください(つまり、not現在のリストではグループ化されています)。リストはインデックス0で始まることに注意してください。これは、クロムアイコンによって適切に取得されます。

enter image description hereenter image description here

注:実行中のアプリを最後にする場合は、-1を引数として使用するだけで十分です。

脚本

from gi.repository import Gio
import sys

def gsettings_get(schema, path, key):
    """Get value of gsettings schema"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema, path)
    return gsettings.get_value(key)

def gsettings_set(schema, path, key, value):
    """Set value of gsettings schema"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema, path)
    if isinstance(value, list):
        return gsettings.set_strv(key, value)
    if isinstance(value, int):
        return gsettings.set_int(key, value)

def main():
    schema='com.canonical.Unity.Launcher' 
    key='favorites'
    current_list = list(gsettings_get(schema,None,key))
    running_index = current_list.index('unity://running-apps')

    position = int(sys.argv[1])

    temp = current_list[position]
    current_list[position] = current_list[running_index]
    current_list[running_index] = temp
    gsettings_set(schema,None,key,current_list)
if __== '__main__': main()
2