AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1067810
Accepted
James Parker
James Parker
Asked: 2018-08-23 02:12:22 +0800 CST2018-08-23 02:12:22 +0800 CST 2018-08-23 02:12:22 +0800 CST

Ubuntu 18.04:更改显示器旋转时的停靠位置

  • 772

在我当前的配置中,我在屏幕左侧有一个停靠栏(显示应用程序图标)。我想知道当显示器旋转 90 度时是否可以将扩展坞移动到顶部(以避免缩小屏幕宽度)。另外,当我回到水平显示器方向时,我希望扩展坞回到原始位置。有人可以帮我这样做吗?

环境

我正在运行 Ubuntu 18.04 并使用默认的 gnome 桌面环境。我的电脑是一台二合一笔记本电脑,它会根据设备方向自动旋转屏幕。

当前尝试

我研究了可能会执行此操作的 gnome 扩展,但Dash to Dock没有这样的选项。

gnome-shell ubuntu-dock 18.04 display-rotation
  • 1 1 个回答
  • 2784 Views

1 个回答

  • Voted
  1. Best Answer
    James Parker
    2018-08-23T20:57:25+08:002018-08-23T20:57:25+08:00

    我们必须根据您的计算机是否带有加速度计来改变方法。如果您的计算机带有加速度计(通常是二合一笔记本电脑或平板电脑),则可以通过检测屏幕方向的变化来完全自动化。否则,创建一个 bash 脚本来同时更改方向和停靠位置将为您提供足够的便利。

    带加速度计的笔记本电脑

    我编写了一个在启动时运行的 python3 代码。该脚本监听屏幕旋转变化并相应地更改停靠位置。

    1. 下载Dash 到 Dock gnome 扩展。就我而言,它不需要启用,但可能是必需的。
    2. 使用您喜欢的文本编辑器,创建一个 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()
    
    1. chmod +x <filename>通过命令使代码可执行。如果您在步骤 2 中将文件保存在 root 拥有的目录中,sudo chmod +x <filename>则需要运行。
    2. 打开“启动应用程序”并添加一个新条目以直接指向您刚刚创建的 python 文件。

    名称:<any>
    命令:<path to the file>
    注释:<any>

    1. 重启你的电脑。

    没有加速度计的电脑

    这种方法会创建一个 bash 脚本,当您想要更改显示方向时需要执行该脚本。

    1. 下载Dash 到 Dock gnome 扩展。就我而言,它不需要启用,但可能是必需的。

    2. 使用您喜欢的文本编辑器,创建一个名为“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
    
    1. chmod +x drotate通过命令使代码可执行。如果您在步骤 2 中将文件保存在 root 拥有的目录中,sudo chmod +x drotate则需要运行。

    2. 打开~/.bash. 在文件末尾创建一个新行并粘贴以下行。export PATH="<path/to/the/directory/with/your/script>:$PATH. 例如,如果您将文件保存在 中/usr/local/drotate,则命令变为export PATH="/usr/local:$PATH. 注意drotate被省略。

    3. 保存文件。

    4. 重新启动终端或运行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
    
    例子
    1. 将主显示屏向左旋转:drotate left
    2. 将主显示屏旋转回正常状态:drotate normal
    3. 将子显示器向左旋转:drotate left 2
    • 3

相关问题

  • 如何在 GNOME 3 的时钟上显示秒数?

  • 如何检查我的 GNOME-Shell 版本?

  • 如何将窗口控件切换到左侧(Gnome Shell)?

  • 禁用鼠标悬停时自动激活 Gnome Shell 活动

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve