В моей текущей конфигурации у меня есть прикрепление (который показывает значки приложения) слева от экрана. Я задавался вопросом, возможно ли переместить прикрепление в вершину, когда монитор повернут 90 градусов (так, чтобы не сужать ширину экрана). Кроме того, я хочу, чтобы прикрепление вернулось в исходном положении, когда я возвращаюсь к горизонтальной ориентации монитора. Кто-то мог помочь мне сделать это?
Среда
Я запускаю Ubuntu 18.04 и использую рабочую среду GNOME по умолчанию. Мой компьютер 2 в 1 ноутбук, который автоматически поворачивает экран на основе ориентации устройства.
Текущая попытка
Я изучил возможные расширения гнома, которые сделают это, но Тире для Прикрепления не имел таких опций.
Мы должны изменить подходы на основе того, идет ли Ваш компьютер с акселерометром или нет. Если Ваш компьютер идет с акселерометром (обычно 2 в 1 ноутбук или планшет), это может быть полностью автоматизировано путем обнаружения экранных изменений ориентации. Иначе создание сценария удара для изменения ориентации и местоположения прикрепления одновременно дало бы Вам достаточно удобства.
Я написал 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 __name__ == "__main__":
main()
chmod +x <filename>
команда. Если бы Вы сохранили свой файл в каталоге, принадлежавшем корню на Шаге 2, то необходимо работать sudo chmod +x <filename>
вместо этого.Имя: <any>
Команда: <path to the file>
Комментарий: <any>
Этот подход создает сценарий удара, который должен быть выполнен, когда Вы хотите изменить свою ориентацию дисплея.
Загрузите Тире для Прикрепления расширения гнома. В моем случае это не должно было быть включено, но это могло бы требоваться.
С Вашим любимым текстовым редактором создайте файл удара, названный "drotate" (для тире, вращаются), поместите следующий код и сохраните его.
#!/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