整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          一篇解決實際問題的文章,順便帶你認識下一些Linux的命令以及簡單的shell腳本編程…

          f49e5a3e12bd0b28e601255e12957942.png

          好吧,其實我是標題黨來的…

          一篇解決實際問題的文章,順便帶你認識下一些Linux的命令以及簡單的shell腳本編程…

          問題描述:

          系統版本:Ubuntu 18.04.4 LTS

          我的筆記本電腦外接了一個顯示器,本來以為和Windows下一樣,筆記本顯示器和外接顯示器會同步顯示,結果ubuntu下外接顯示器和筆記本顯示不一致,感覺像是被強制分屏了。體驗非常不好,感覺還影響了I/O設備,把外接顯示器拔了結果鼠標和鍵盤都不太能動了,重啟在沒外接顯示器的前提下鼠標和鍵盤才恢復正常。

          問題解決方案: 一.關閉筆記本顯示器

          輸入xrandr命令查看當前的顯示設備:

          xrandr

          xrandr簡介:

          "xrandr" 是一款官方的 RandR (Resize and Rotate)X Window System 擴展配置工具。它可以設置屏幕顯示的大小、方向、鏡像等。

          發現有兩個顯示設備,如下圖:

          1206be393f6cf55740aef16882bc23b3.png

          一個是eDP-1(筆記本顯示器),一個是HDMI-1(外接顯示器),于是用以下命令關閉了筆記本的顯示器,只用外接顯示器

          xrandr --output HDMI-1 --auto --output eDP-1 --off

          解釋: xrandr --output 要顯示的設備 --auto --output 要關閉的設備 --off

          這樣舒服多了,但是一重啟,發現又回到原來的樣子,要再次手動使用以上命令…

          每次開機都要這么手動輸一次命令才能關掉筆記本的顯示器,當然不爽啦,于是就想能不能在開機的時候讓系統自己跑個腳本運行這個命令。

          二、用shell腳本執行關閉顯示器命令

          怎么自動執行這個命令呢?當然想到了shell腳本啦。只要能在shell腳本中實現我們要做的事情,然后讓linux開機自動運行shell腳本,不必每次開機都要手動輸入命令才能關閉筆記本顯示器只顯示外接顯示器,就達到了我的目的。

          所以我們需要做到兩件事情,一是我們需要讓腳本在開機時能自動運行,二是我們需要寫一個可以執行關閉顯示器命令的腳本

          2.1 crontab設置系統定時任務

          想做到讓Linux開機運行某個任務有幾種方式,這里我用了crontab命令。

          通過crontab 命令,我們可以在固定的間隔時間執行指定的系統指令或 shell script腳本。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。這個命令非常設合周期性的日志分析或數據備份等工作。

          為了確保用crontab可以執行到我們的腳本,我們在某個路徑下新建腳本.sh,比如在/home/pipi/myshell下新建.sh

          然后寫入最簡單的幾行:

          #! /bin/bash
          echo "exec scripts success" >>/home/pipi/myshell/crontablog.txt
          exit 0

          找不到外接顯示器_找不到外接顯示器_找不到外接顯示器

          解釋: 1)#! /bin/bash 聲明這個腳本使用的shell名稱,當這個程序執行時,它能夠加載bash的相關環境配置文件,并且執行bash使得命令能夠執行,如果沒有設置好這一行,那系統可能會因為無法判斷該程序需要使用什么shell來執行而導致該程序無法執行。

          2)echo "exec scripts success" >>/home/pipi/myshell/.txt 輸出exec scripts success這句話到.tx文件中去,>>表示在文件后追加,如果文件不存在會自動創建。

          這個腳本的主要目的是為了驗證我們的shell腳本是否被執行到。執行前我們需要用chmod命令賦予文件執行權限:

          chmod +x /home/pipi/myshell/authxrandr.sh

          然后使用./.sh執行腳本,結果發現文件.txt成功追加一行exec scripts success

          ,說明我們的腳本可以正常執行。

          解釋: 使用ls -l 以下命令可以查看文件權限等信息,其中r為可讀,w為可寫,x為可執行

          ls -l /home/pipi/myshell/autoxrandr.sh

          如果新建文件對當前用戶沒有可執行權限(x),直接使用./.sh就會出現下面的報錯:

          注意: 這里最好要先驗證你的腳本是否有問題,至少需要用ls -l檢查下是否有執行權限

          接下來我們用crontab -e 編輯當前用戶的時程表,首次打開編輯可能會讓你選擇用哪個編輯器,可以選擇nano(最簡單)或者vi進入。

          我們在打開的文件里面加入這么一句:

          @reboot /home/pipi/myshell/autoxrandr.sh

          表示系統重啟時執行腳本.sh。

          保存退出后重啟電腦驗證一下,如果重啟后你發現/home/pipi/myshell/.txt 多了一行

          exec scripts success

          那么說明我們成功的用crontab實現了系統重啟后執行我們編寫的shell腳本.sh。

          2.2 寫一個可以執行關閉顯示器命令的腳本

          經過一番研究,參考了國外一些Linux問答社區的回答, 新的.sh修改如下:

          #! /bin/bash
          export DISPLAY=:0
          echo "start run scripts" >>/home/pipi/myshell/crontablog.txt
          # wait until user signs on to get .Xauthority file settings.
          UserName=""
          while [[ $UserName == "" ]]; do
              sleep 2
              echo "waiting for user login" > /home/pipi/myshell/crontablog.txt
              UserName="$(who -u | grep -F '(:0)' | head -n 1 | awk '{print $1}')"
          done
          sleep 10
          

          找不到外接顯示器_找不到外接顯示器_找不到外接顯示器

          xrandr --output HDMI-1 --auto --output eDP-1 --off exit 0

          解釋:

          這個腳本做了幾件事情:

          1)export DISPLAY=:0,設置當前用戶的圖形顯示的位置(當前機器),這是因為cron默認的環境變量設置不包括這個$DISPLAY

          Cron limited set of by default . To get xrandr to work through a Cron job, you should export the value of the current user's $DISPLAY . To do that add the follow line to the of your script (or add it within the crontab file )

          2)等待用戶登錄; 之所以要等待用戶登錄完再執行關閉顯示器操作的原因是系統需要時間尋找外接顯示器信號,否則找不到顯示器會導致我們的命令失敗,所以我們等待用戶登錄完再去執行關閉筆記本顯示器的命令;

          3)xrandr 設置圖形輸出到外接顯示器HDMI-1,關閉顯示器eDP-1;

          4)用echo輸出一些字符串到文件中,可以通過查看/home/pipi/myshell/.txt 驗證我們的程序是否執行到。

          重啟驗證下,登錄后成功關閉了筆記本的顯示器!

          總結:

          1、xrandr簡介:%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87

          2、crontab的簡介和例子:

          3、chmod用于修改文件權限

          4、ls -l 文件名

          可以詳細列舉文件的權限等信息

          5、export

          用于設置或顯示環境變量

          6、shell編程相關

          1)#! /bin/bash

          聲明這個腳本使用的shell名稱,當這個程序執行時,它能夠加載bash的相關環境配置文件,并且執行bash使得命令能夠執行,如果沒有設置好這一行,那系統可能會因為無法判斷該程序需要使用什么shell來執行而導致該程序無法執行。

          2)如果新建文件對當前用戶沒有可執行權限(x),直接使用./.sh就會出現下面的報錯:

          denied

          7、參考鏈接:

          1)國外問答社區類似的問題

          2)為什么要添加export DISPLAY=:0


          主站蜘蛛池模板: 国产手机精品一区二区| 日本一区二三区好的精华液| 日本视频一区二区三区| 国产av福利一区二区三巨| 无码国产精品一区二区免费式芒果 | 欧洲精品码一区二区三区免费看 | 亚洲日韩精品一区二区三区无码| 亚洲国产美女福利直播秀一区二区| 正在播放国产一区| 国产伦精品一区二区三区免费迷| A国产一区二区免费入口| 在线一区二区观看| 精品一区精品二区制服| 日韩精品人妻一区二区中文八零| 风间由美在线亚洲一区| 亚洲日韩国产一区二区三区在线| 久久99精品一区二区三区| 人妻少妇精品视频一区二区三区| 色婷婷AV一区二区三区浪潮 | 精品无码人妻一区二区免费蜜桃| 国模无码视频一区二区三区| 国产凹凸在线一区二区| 色狠狠一区二区三区香蕉蜜桃 | 国产午夜三级一区二区三| 亚洲成av人片一区二区三区| asmr国产一区在线| 免费萌白酱国产一区二区三区| 亚洲一区二区三区影院| 国产午夜福利精品一区二区三区 | 亚洲天堂一区二区| 国产色欲AV一区二区三区| 亚州国产AV一区二区三区伊在| 国产成人精品久久一区二区三区av| 国产亚洲无线码一区二区 | 奇米精品一区二区三区在| 一区二区视频传媒有限公司| 中文字幕精品一区二区2021年| 精品女同一区二区三区免费播放| 中文字幕一区在线| 在线观看中文字幕一区| 嫩B人妻精品一区二区三区|