在我当前的配置中,屏幕左侧有一个 Dock(显示应用程序图标)。我想知道是否可以在显示器旋转 90 度时将 Dock 移到顶部(以避免缩小屏幕宽度)。另外,当我回到水平显示器方向时,我希望 Dock 回到原来的位置。有人能帮我做到这一点吗?
环境
我正在运行 Ubuntu 18.04 并使用默认的 gnome 桌面环境。我的电脑是一台二合一笔记本电脑,可以根据设备方向自动旋转屏幕。
当前尝试
我研究了可以实现这一点的 gnome 扩展,但是Dash 到 Dock没有这样的选择。
答案1
我们必须根据您的计算机是否配备加速度计来改变方法。如果您的计算机配备加速度计(通常是二合一笔记本电脑或平板电脑),则可以通过检测屏幕方向变化完全自动化。否则,创建一个 bash 脚本来同时更改方向和停靠位置将为您提供足够的便利。
带有加速度计的笔记本电脑
我编写了一个在启动时运行的 python3 代码。该脚本会监听屏幕旋转变化并相应地更改停靠位置。
- 下载Dash 到 Dockgnome 扩展。就我而言,不需要启用它,但可能需要启用它。
- 使用您喜欢的文本编辑器创建一个 python3 文件,输入以下代码并保存。您可以随意命名或放置文件,只要您记得它的位置,以便在步骤 3 和步骤 4 中引用它即可。我将其命名为“dock_rotator.py”。
#!/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 __name__ == "__main__":
main()
- 通过命令使代码可执行
chmod +x <filename>
。如果您在步骤 2 中将文件保存在 root 拥有的目录中,则需要运行sudo chmod +x <filename>
。 - 打开“启动应用程序”并添加一个新条目以指向刚刚创建的 python 文件。
名称:<any>
命令:<path to the file>
注释:<any>
- 重启你的电脑。
没有加速度计的计算机
此方法会创建一个 bash 脚本,当您想要更改显示方向时需要执行该脚本。
下载Dash 到 Dockgnome 扩展。就我而言,不需要启用它,但可能需要启用它。
使用您最喜欢的文本编辑器,创建一个名为“drotate”(代表 dash rotate)的 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 中将文件保存在 root 拥有的目录中,则需要运行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