現在の構成では、画面の左側にドック(アプリケーションアイコンを表示)があります。モニターを90度回転させたときにドックを上に移動できるかどうか疑問に思っていました(画面の幅が狭くなるのを避けるため)。また、水平モニターの向きに戻ったときに、ドックを元の位置に戻したい。誰かがこれを手伝ってくれますか?
環境
Ubuntu 18.04を実行しており、デフォルトのgnomeデスクトップ環境を使用しています。私のコンピューターは、デバイスの向きに基づいて自動的に画面を回転させる2-in-1ラップトップです。
現在の試み
これを行う可能性のあるgnome拡張機能を調べましたが、 Dash to Dock にはそのようなオプションがありませんでした。
コンピュータに加速度計が付属しているかどうかに基づいて、アプローチを変更する必要があります。コンピューターに加速度計(通常は2-in-1ラップトップまたはタブレット)が付属している場合、これは画面の向きの変化を検出することで完全に自動化できます。それ以外の場合、bashスクリプトを作成して方向とドックの位置を同時に変更すると、十分な利便性が得られます。
ブート時に実行されるpython3コードを作成しました。スクリプトは画面の回転の変化をリッスンし、それに応じてドックの位置を変更します。
#!/usr/bin/env python3
import os
import subprocess
import dbus
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GObject as gobject
def run_command(command, Shell=False):
""" Takes a string to run a command on bash
"""
p = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
output = p.communicate()[0]
return output.decode()
def enable_view_rotation_lock():
os.environ["GIO_EXTRA_MODULES"] = "/usr/lib/x86_64-linux-gnu/gio/modules/"
def rotation_locked():
locked = run_command("gsettings get \
org.gnome.settings-daemon.peripherals.touchscreen \
orientation-lock")
return locked.strip() == "true"
def move_dash_top():
run_command("gsettings set org.gnome.Shell.extensions.dash-to-dock dock-position TOP")
def move_dash_left():
run_command("gsettings set org.gnome.Shell.extensions.dash-to-dock dock-position LEFT")
def sensor_handler(*args, **kwargs):
if len(args) < 2:
return
dbus_dict = args[1]
key = 'AccelerometerOrientation'
if key not in dbus_dict:
return
orientation = dbus_dict[key]
if not rotation_locked():
if orientation in ["left-up", "right-up"]:
move_dash_top()
else:
move_dash_left()
def main():
enable_view_rotation_lock()
global loop
DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()
bus = dbus.SystemBus()
bus.add_signal_receiver(
sensor_handler,
path='/net/hadess/SensorProxy')
loop.run()
if __== "__main__":
main()
chmod +x <filename>
コマンドでコードを実行可能にします。手順2でルートが所有するディレクトリにファイルを保存した場合は、代わりにSudo chmod +x <filename>
を実行する必要があります。名前:<any>
コマンド:<path to the file>
コメント:<any>
このアプローチは、ディスプレイの向きを変更したいときに実行する必要があるbashスクリプトを作成します。
ダウンロード Dash to Dock gnome extension。私の場合、有効にする必要はありませんでしたが、必要になる場合があります。
お気に入りのテキストエディターで、「drotate」(ダッシュローテーション用)というbashファイルを作成し、次のコードを入力して保存します。
#!/bin/bash
show_help () {
echo "drotate <rotation> [<display number>]"
echo "<rotation> : inverted | left | normal | right "
echo "<display number> : any number between 1 to number of displays connected"
echo " defaults to 1"
}
set_gnome_orientation () {
case "$1" in
inverted)
GNOME_ORIENTATION=LEFT
;;
normal)
GNOME_ORIENTATION=LEFT
;;
left)
GNOME_ORIENTATION=TOP
;;
right)
GNOME_ORIENTATION=TOP
;;
*)
echo "Invalid orientation"
show_help
exit 1
;;
esac
}
if [ $# -eq 0 ] || [ $# -gt 2 ]; then
show_help
exit 1
fi
if [ $# -eq 1 ]; then
DISPLAY_INDEX=1 # any number between 1 to # of displays connected
else
DISPLAY_INDEX=$2
fi
DISPLAY=$( xrandr --current | grep -F connected |\
grep -Fv disconnected | cut -d" " -f 1 | head -${DISPLAY_INDEX} | tail -1 )
if [ -z "$DISPLAY" ]; then
echo Could not find display $DISPLAY_INDEX
exit 1
fi
echo $DISPLAY
ORIENTATION="$1"
GNOME_ORIENTATION=""
set_gnome_orientation $ORIENTATION
xrandr -d :0 --output ${DISPLAY} --rotate ${ORIENTATION}
export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules/
gsettings set org.gnome.Shell.extensions.dash-to-dock dock-position $GNOME_ORIENTATION
chmod +x drotate
コマンドでコードを実行可能にします。手順2でルートが所有するディレクトリにファイルを保存した場合は、代わりにSudo chmod +x drotate
を実行する必要があります。
~/.bash
を開きます。ファイルの最後に新しい行を作成し、次の行を貼り付けます。 export PATH="<path/to/the/directory/with/your/script>:$PATH
。たとえば、ファイルを/usr/local/drotate
に保存した場合、コマンドはexport PATH="/usr/local:$PATH
になります。 drotate
が省略されていることに注意してください。
ファイルを保存します。
端末を再起動するか、source .bashrc
を実行します。彼らは同じことをします。これで、スクリプトを実行できるようになります。
ターミナルを開き(Ctrl-Alt-t)、drotate <rotation> [<display number>]
と入力します。
drotate <rotation> [<display number>]
<rotation> : inverted | left | normal | right
<display number> : any number between 1 to number of displays connected
defaults to 1
drotate left
drotate normal
drotate left 2