端末でコマンドをPC起動時に自動実行したいのですが

Linux Mintの初心者向けフォーラム

端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by yosh » 2014年1月12日(日) 09:43

Linux Mint 16 をインストールしたのですが、ノートパソコンのタップクリックが有効にならないため、現在は端末を開き

synclient TapButton2=3
synclient TapButton1=1

を手動で入力、実行しています。

PC起動時に自動実行したいのですが、どのように設定すればいいのでしょうか?
yosh
前相撲
 
記事: 3
登録日時: 2014年1月12日(日) 09:35

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by ban » 2014年1月13日(月) 01:17

yoshさん

Linux Mint 16 にも MATE, Cinnamon, Xfce, KDE があり、それぞれ 32bit と 64bit があります。
今回の質問の場合、 32bit と 64ibt はあまり重要ではありませんが、
MATE, Cinnamon, Xfce, KDE はそれぞれ微妙に設定が異なります。
ですので質問の場合は省略せずにバージョン名をフルでお願いします。

とは言っても、基本的にやることは同じです。
設定のための実行ファイルを作成し、自動起動プログラムとして登録します。

先ず実行ファイルの作成です。
以下の内容のファイルをどこかに作成します。
コード: 全て選択
#!/bin/sh

synclient TapButton2=3
synclient TapButton1=1

場所も名前も好きな場所好きな名前にして構いません。
ただし通常はホームディレクトリの下に bin というディレクトリを作成し、そこに保存するのが一般的です。
もしホームディレクトリの下にディレクトリが増えるのが嫌なら、別の場所でも構いません。
bin の代わりに .bin にして隠しディレクトリにするか、/usr/bin に保存するか、他の場所でも構いません。
名前も何でもOKですが、分かりやすい名前で最後に .sh をつけるのが一般的です。
例えば set_tap_button.sh などです。

ファイルができたらこのファイルに実行可能権限を与えます。
実行可能権限を与える方法はいくつかありますが、例えば以下のコマンドです。
コード: 全て選択
chmod +x set_tap_button.sh


次にこのファイルを自動起動プログラムとして登録します。
MATE の場合は以下の手順です。
コード: 全て選択
Menu -> コントロールセンター -> 自動起動するアプリ -> 追加

Cinnamon の場合は以下の手順です。
コード: 全て選択
Menu -> 設定 -> 自動起動するプログラム -> 追加

すると MATE も Cinnamon も次の画面が開きます。
ScreenshotAddAutostart.png
ScreenshotAddAutostart.png (16.19 KiB) 表示数: 16690 回

ここで名前は何でも構いません。好きな名前をつけます。
コマンドは先ほど作成したファイルを指定します。
説明も何でも構いません。分かりやすい説明を書きます。
名前とコマンドと説明を設定したら「追加」をクリックします。

以上でOKのはずです。
ログアウト、ログインして思ったとおりになっているか確認してださい。
マシンの再起動の必要はありません。ログアウト、ログインだけでOKです。
Hiroaki Ban
Linux Mint 16 Perta KDE 64bit
端末入力を楽にする3つの小技
http://forums.linuxmint-jp.net/viewtopic.php?f=10&t=1178
ban
幕下
 
記事: 75
登録日時: 2013年11月04日(月) 01:41

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by sawakaze » 2014年1月13日(月) 15:22

さわかぜです

横からすみません
ちょっと気になったので。

yoshさんさんのやりたいことは
(1) PCを起動時のログイン画面が表示する前にコマンドを実行したい
(2) PCを起動してログイン直後にコマンドを実行したい
のどちらでしょうか?

両者の違いはログイン画面でコマンド実行の影響を受けるかどうかです。
----
Sawakaze
Linux Mint Debian Edition
Email : souichirho@gmail.com
WebPage : http://www.sawakaze.net/sishikawa/
sawakaze
幕下
 
記事: 60
登録日時: 2013年6月11日(火) 20:56
お住まい: Aichi

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by ban » 2014年1月13日(月) 16:46

さわかぜさん

確かにちょっと気になりますね。
先に書いた方法だと、ログイン画面でタップを有効にしたい場合はダメですね。

いや実は少しは気になっていたのですが、
yoshさんはいつもログインしてからターミナルからコマンドを実行しているということなので、
これで良いかな?と思ったのですが…

ログイン画面でもタップを有効にしたい場合は以下の3つのタイミングのどこかで
スクリプトを実行する必要がありますが、どこが良いですかね?

・マシン起動時
・X起動時
・MDM(Mint Display Manager)起動時

それぞれどこをいじれば良いかちょっと考えてみました。(詳しく調べていないので間違っているかもです。)

・マシン起動時
 /etc/init.d/ にスクリプトを作成し、/etc/rc0.d/ 〜 /etc/rc6.d/ の適切な位置にスクリプトへのシンボリックリンクを作成する。
・X起動時
 /etc/X11/ 以下のどこかをいじる。
・MDM(Mint Display Manager)起動時
 /etc/mdm/Init/ 以下あたりにスクリプトを作成する。

どれも結構面倒ですが、X起動時は先ず脱落でしょうね。
xorg.conf を作成するか、どこかにスクリプトを置くことになりますが、
xorg.conf 作成は推奨されてませんし、スクリプトを置く場合もどこに置くのか詳しく調べないと不明です。

となると、マシン起動時かMDM起動時になるかと思いますが…
Hiroaki Ban
Linux Mint 16 Perta KDE 64bit
端末入力を楽にする3つの小技
http://forums.linuxmint-jp.net/viewtopic.php?f=10&t=1178
ban
幕下
 
記事: 75
登録日時: 2013年11月04日(月) 01:41

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by ban » 2014年1月13日(月) 17:21

自己レスです。

・マシン起動時の場合の設定方法
以下のファイルを編集する。
コード: 全て選択
/etc/rc.local

上記ファイルの exit 0 の前に以下を記述する。
コード: 全て選択
SYNCLIENT=`which synclient`
if [ "x$SYNCLIENT" != "x" ] ; then
  $SYNCLIENT TapButton2=3
  $SYNCLIENT TapButton1=1
fi

マシンを再起動する。

・MDM(Mint Display Manager)起動時の場合の設定方法
以下のファイルを編集する。
コード: 全て選択
/etc/mdm/Init/Default

上記ファイルの exit 0 の前に以下を記述する。
コード: 全て選択
SYNCLIENT=`which synclient`
if [ "x$SYNCLIENT" != "x" ] ; then
  $SYNCLIENT TapButton2=3
  $SYNCLIENT TapButton1=1
fi

マシンを再起動する。

手元で確認できないのでなんとも言えませんが、たぶんどちらでもうまく行くと思いますが…

コードに誤りがあったので訂正しました。
しかし試したところ、両方ダメでした。
最後に編集したユーザー ban [ 2014年1月14日(火) 01:46 ], 累計 2 回
Hiroaki Ban
Linux Mint 16 Perta KDE 64bit
端末入力を楽にする3つの小技
http://forums.linuxmint-jp.net/viewtopic.php?f=10&t=1178
ban
幕下
 
記事: 75
登録日時: 2013年11月04日(月) 01:41

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by sawakaze » 2014年1月13日(月) 17:39

さわかぜです。

タップの変数設定ならば、私は個人的には、X起動時だと思っています。

理由は
MDM 起動の場合, MDM以外のディスプレーマネージャにかえた時にまた設定しないといけなくなります。
また、rc.localに記すとタップとか全く使わない場合、例えばテキストモードなどでも変数がセットされてしまいます。

でX起動時ならば
/etc/X11/Xsession
に記す方法があると思います。
これはXが起動時にセッションを貼る時点で読み込むものです

以下の周辺に記せばいいのではと思います
# initialize variables for use by all session scripts

^^^
ただ
Linux Mint 16 でMDMを使わない人、テキストモードで使用している人などほぼいないと思います。
したがって、3つのうち、一番編集がしやすいところでいいと、私は思います。
他の人の意見も聞いてみたいですね。

まぁ、質問主が何がやりたいかによりますが・・・
----
Sawakaze
Linux Mint Debian Edition
Email : souichirho@gmail.com
WebPage : http://www.sawakaze.net/sishikawa/
sawakaze
幕下
 
記事: 60
登録日時: 2013年6月11日(火) 20:56
お住まい: Aichi

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by ban » 2014年1月14日(火) 01:32

普段使っていないノートPCで試してみました。

ところで今更ですが、以下のコマンドの意味の確認です。
synclient TapButton2=3 タッチパッドの2フィンガータップを右クリックに割当
synclient TapButton1=1 タッチパッドの1フィンガータップを左クリックに割当
これで良いのですよね?

さて先に書いた以下の2つを試してみました。
・マシン起動時の場合の設定 -> /etc/rc.local の編集
・MDM(Mint Display Manager)起動時の場合の設定 -> /etc/mdm/Init/Default の編集
結論は両方ダメでした。
理由は、Xが起動してからではないと synclient コマンドが以下のエラーを出すからです。
コード: 全て選択
Failed to connect to X Server.

・X起動時
これについては試していませんが、いろいろ調べてみたところどれも失敗したという記事ばかりで、
やはりうまく行かないのではないかと思います。

そもそもログイン画面では、ちゃんと1フィンガータップが左クリックに割り当てられていました。
それがログインすると割当が解除されています。
つまり、タップをどう割り当てるかはユーザーそれぞれの設定に任せるという仕様のようです。


結局いろいろ試した結果、自動起動プログラムに登録して、ログイン時にスクリプトを実行するのが良いようです。
もう一度手順を書きます。(一部訂正があります。)

以下の内容のファイルをどこかに作成します。名前や場所はどこでも良いです。
コード: 全て選択
#!/bin/sh

synclient TapButton2=3
synclient TapButton1=1
exit 0

作成したファイルに実行権限を与えます。
コード: 全て選択
cd ファイルを保存したディレクトリ
chmod +x 作成したファイル

ファイルを自動起動プログラムとして登録します。
MATE の場合
コード: 全て選択
Menu -> コントロールセンター -> 自動起動するアプリ -> 追加

Cinnamon の場合
コード: 全て選択
Menu -> 設定 -> 自動起動するプログラム -> 追加

すると以下の画面が開くので、名前、コマンド、説明を入力して、「追加」をクリックします。
ScreenshotAddAutostart.png
ScreenshotAddAutostart.png (16.19 KiB) 表示数: 16646 回

ログアウト、ログインします。
Hiroaki Ban
Linux Mint 16 Perta KDE 64bit
端末入力を楽にする3つの小技
http://forums.linuxmint-jp.net/viewtopic.php?f=10&t=1178
ban
幕下
 
記事: 75
登録日時: 2013年11月04日(月) 01:41

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by yosh » 2014年1月15日(水) 01:06

banさん sawakazeさん

とてもわかりやすいご説明ありがとうございました。
おかげさまで、起動時の自動化がうまく設定できました。

linux自体まったくの初心者で不安だったのですが、丁寧なとてもわかりやすい解説をいただいて、
とても感動しました。

本当にありがとうございました。 :lol:

解説中の、端末構文なのですが、

#!/bin/sh
...
exit

というのは必要なのでしょうか?

端末は、ウィンドウズのDOSプロンプトのような使い方だとは思うのですが、
基本的な構文がまったく分かりません。
何か参考になるHPとかがあればご紹介いただけるとありがたいです。
yosh
前相撲
 
記事: 3
登録日時: 2014年1月12日(日) 09:35

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by ban » 2014年1月15日(水) 03:14

yoshさん

どういたしまして。うまく行ったようで良かったです。

ご質問の件ですが、以下が必要かどうかについてです。
コード: 全て選択
#!/bin/sh
...
exit 0

なぜこれらを付けるかというと、このファイルは小さいながらも立派なプログラムなのです。
ですので、 chmod コマンドで実行可能設定をしました。(パーミッションと呼びます)
試しにこの実行パーミッションを外してみましょう。
端末を開き、保存したファイルのディレクトリへ行き、以下を実行してみます。(ファイル名は set_tap_button.sh だとします。)
コード: 全て選択
ファイルの詳細情報表示コマンド
ls -l set_tap_button.sh

ファイルの詳細情報が表示される
-rwxrwxr-x 1 ban ban   996  1月 14 09:28 set_tap_button.sh

実行パーミッションを外す
chmod -x set_tap_button.sh

ファイルの詳細情報表示コマンド
ls -l set_tap_button.sh

左側のrwxの文字列の x が - に変わっている(r は読み込み、w は書き込みパーミション)
-rw-rw-r-- 1 ban ban   996  1月 14 09:28 set_tap_button.sh

この状態でログアウト、ログインしてみてください。
タップボタンが無効になっているはずです。
なぜかというと実行パーミッションを外したので、このファイルは単なるテキストファイルになってしまったからです。
ここまで試したらもう一度実行パーミッションをつけて、ログアウト、ログインしましょう。
コード: 全て選択
chmod +x set_tap_button.sh

これをやってみると、このファイルがプログラムだという実感が湧くはずです。

で、プログラムだとすると、プログラミング言語が何かということが問題になります。
それが sh だと教えているのが一行目です。
#! はプログラミング言語が何かを指定するという記号で、/bin/sh はそのプログラミング言語が保存されているファイルを指しています。
最後の exit 0 は、終了ステータスを返しています。0 はエラーがなかったことを意味します。エラーがあった場合は、例えば exit 1 などとします。
一行目も最後の行も無くても大抵動きますが、(デフォルトで /bin/sh が使われ、終了ステータスが何であってもそれ以前の行は有効なので)、
記述した方が正しい記述です。

参考サイトは最初に読むなら以下が分かりやすいと思います。
http://www.atmarkit.co.jp/ait/articles/0202/05/news001.html
このサイトは基本中の基本を書いているので、もう少し詳しく知りたければ「シェルスクリプト」や「/bin/sh」などで検索してください。

次に、
端末は、ウィンドウズのDOSプロンプトのような使い方だとは思うのですが、

ということですが、それはその通りなのですが、たぶんyoshさんが持っているイメージとは違います。
たぶん、端末や DOSプロンプトは GUI(グラフィカルユーザインターフェイス)に「付属しているツール」のイメージだと思いますが、そうではありません。
「付属しているツール」ではなく、「GUI のベース」なのです。
どういう事かというと、Windows も現在は GUI と CUI(キャラクタユーザインターフェイス、DOSプロンプトの事)が絡み合っていて、DOSだけでは起動しませんが、
初期の頃の Windows(Windows 3.1 くらいまで)は先ず MS-DOS を起動し、DOS画面から windows というコマンドを打って Windows を起動していました。
Linux は現在でも GUI(MATE や Cinnamon など)なしでも起動することが可能です。Windowsほど密接に GUI と CUI が絡み合っていないからです。
ですので、GUI を必要としないコンピュータ、例えばサーバや電気製品内部の組み込みなどでは Linux が使われることが多いです。
つまり、CUI が付属しているツールではなく、実は GUI の方が付属しているツールなのです。

解説はこのくらいにして、後でちょっと気がついたことがあるので書きます。
これまで、実行可能なスクリプトファイルを作成し、そのファイルを自動起動プログラムとして登録するとして話を進めてきましたが、
もしかするとこのファイルは不要かもしれません。(試してないのでなんとも言えませんが)
「自動起動するプログラムの追加」の画面を出して、コマンド欄に直接以下を書き込んでも動作するかもしれません。
コード: 全て選択
synclient TapButton2=3 TapButton1=1

synclient コマンドは一行で TapButton2=3 TapButton1=1 を同時に指定できると書いてあるのを見つけたので、もしかするとこれだけで動作するかもしれません。
やってみなければ分からないので試してみてください。

注)解説はなるべく分かりやすいように書いたので、厳密には正しくないかもしれないので、その点ご了承ください。
Hiroaki Ban
Linux Mint 16 Perta KDE 64bit
端末入力を楽にする3つの小技
http://forums.linuxmint-jp.net/viewtopic.php?f=10&t=1178
ban
幕下
 
記事: 75
登録日時: 2013年11月04日(月) 01:41

Re: 端末でコマンドをPC起動時に自動実行したいのですが

投稿記事by yosh » 2014年1月18日(土) 03:17

banさん ありがとうございます。 :D

返事が遅くなり申し訳ありません。

またまた、わかりやすい長文をいただきありがとうございました。
linuxはGUIベースではないのですね。

いままでwindowsしか使ったことがなかったのですが、XPのサポート終了にあわせてLINUXに挑戦してみました。
おもったより使いやすいOSで、どんどん使っていきたいと思います。

参考URLもみながら勉強していきたいと思います。

本当にありがとうございました。 :D
yosh
前相撲
 
記事: 3
登録日時: 2014年1月12日(日) 09:35


Return to 初心者サポート

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[3人]