20200801のLinuxに関する記事は6件です。

VirtualBox上で動くUbuntuの解像度を変更する

環境

VirtualBox 6.1
Ubuntu 18.04

注意:日本語ではなく英語環境でUbuntuをインストールしています。

解像度の変更方法

提示した画像に沿って操作すれば問題なく変更できると思います。
英語環境のため、テキストは適宜読み替えてください。

デスクトップ画面の左下、"Show Applications"を選択する

image.png

検索ボックスに"dis"と入力し、SettingsのDisplaysを選択する
image.png

image.png

Displays内のResolutionから、任意の解像度を選択する

image.png

image.png

変更した内容を適用する

image.png

image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Ruby] 別ユーザで外部コマンドを実行する

前提

  • Ruby 2.7
  • Ubuntu 20.04
  • あんまり深く考えてない

以下のtest.sh というファイルを、superuser な Ruby から特定のユーザで起動したい。

#!/bin/bash
echo "test.sh ok"
id

実装

gid = 1001
uid = 1001

pid = fork do
  exit 127 unless Process::GID.change_privilege(gid) == gid
  exit 127 unless Process::UID.change_privilege(uid) == uid
  begin
    exec './test.sh'
  rescue  # Errno::ENOENT
    exit 127
  end
  exit 127  # なんかそれ以外のケース
end

res = Process.waitpid(pid)
puts 'complete'
p $?

実行結果

$ sudo ruby a.rb 
test.sh ok
uid=1001(****) gid=1001(****) groups=1001(****),0(root)
complete
#<Process::Status: pid 75202 exit 0>

注意点

  • spawnにはユーザを変更するような機能は無いので、forkしてからexecする。
  • 全部成功する前提であればこれは楽なんだけれども。失敗するケースのエラーハンドリングを考えたい。
    • forkしており別プロセスなので、変数は共有出来ないはず。IO.pipeも馬鹿っぽい
    • abort すると、exec成功時のアプリケーションで失敗したケースと見分けがつかない。
    • そこで、終了コード127(つまりENOENT)で失敗を伝える。exec成功時のアプリケーションで127を返されると見分けつかないが、それは無いとしておく。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

IBusで全角半角を切り替えるショートカットを設定する方法

  • 環境
    • CentOS Linux release 7.8.2003 (Core)
    • IBus 1.5.17
  1. [Preferences]からダイアログを表示する
  2. [General]タブ > [Keyboard Shortcuts] > [Next input method:] > [...]ボタンでダイアログを表示する
  3. [Key code:]と[Modifiers:]を設定する
  4. [Add] > [Apply] > [OK]ボタンでダイアログを閉じる
  5. [Close]ボタンでダイアログを閉じる

image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntu20.04にdropboxをインストールして実行

※ この記事は個人で実行してみた際にうまく行った方法を記しただけで、検証・考察して得た方法ではありません。
※ ほとんど以下の公式サイトに書いてあるとおりです。
https://www.dropbox.com/install-linux

手順

1. インストール

以下のコマンドを実行してインストール

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

2. ログイン、登録

以下のコマンドを実行してDropboxデーモンを起動

~/.dropbox-dist/dropboxd

サーバーで初めて Dropbox を実行する場合、使用中のブラウザでリンクをコピーして貼り付けて新規アカウントを作成するか、既存のアカウントとサーバーを連携させるように指示が表示されます。その後、Dropbox フォルダがホーム ディレクトリに作成されます。(上記公式HPより)

作成された~/Dropboxにファイルを入れると同期されるようになる。
上記プログラムを終了してしまうと、自動同期されないので以下のプログラムの実行などが必要

3. 同期させるためのプログラムの実行

公式サイト(以下URL)の下部から"Pythonスクリプト"をダウンロードする
https://www.dropbox.com/install-linux

ダウンロードしたpythonプログラムを実行

python3 dropbox.py start

これで自動で同期されるようになる。
python2だとそのままでは実行できない点に注意。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【ln】ディレクトリのシンボリックリンクの貼り方がややこしい

サーバーにプロジェクトをデプロイする際に、公開フォルダのみをドキュメントルートに置きたかった。

やりたいこと

ざっくりこんな感じのツリーがあったとする。

root
├── project
│   ├── etc
│   └── public
│       ├── index.html
│       ├── css
│       └── js
└── public_html
    └── project

やりたいこととしては,
/root/public_html/project

/root/project/public
へのリンクを張り

public_html
    └── project
        ├── index.html
        ├── css
        └── js

という見え方をする状態。

lnコマンドでシンボリックリンクを張る

失敗

$ cd /root/public_html
$ ln -s /root/project/public project

結果

$ ls -l
drwx---r-x project

リンク貼られてない。

$ cd project
$ ls -l
lrwxrwxrwx public -> /root/project/public

/root/public_html/project
の下にpublicというリンクができてしまった。
失敗なのでいったん消す。

$ rm public

ディレクトリの中身をリンクする

lnコマンドの際に「/」付けるかどうかで挙動が変わるらしい。
再挑戦。

$ cd /root/public_html

$ ln -s /root/project/public/ project

$ ls -l
lrwxrwxrwx index.html -> /root/project/public/index.html
lrwxrwxrwx css -> /root/project/public/css
lrwxrwxrwx js -> /root/project/public/js

できた。

この方法だと、
/root/public_html/project
というディレクトリが実体としてあった上でリンクが貼られる。
なので、
/root/public_html/project
がない状態でこれをやろうとすると怒られた。

ディレクトリそのものをリンクする

一旦既存のディレクトリ消す。

$ pwd
/root/public_html

$ rm -rf project
$ ln -s /root/project/public project

$ ls -l
lrwxrwxrwx project -> /root/project/public

これもリンクは貼れた。
こっちはprojectそのものがリンクになる。

まとめ

レンタルサーバーで試したところ、「ディレクトリそのものをリンクする」だと、後ほど勝手に空のディレクトリに上書きされてしまった。
サーバーの設定でドメイン(サブドメイン)名のディレクトリが自動で作られるようなので、ディレクトリと認識されずに上書きされたのだろうか。

なので今回は
「ディレクトリの中身をリンクする」方法を採用。

時と場合によって使い分ける感じかな。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

エイリアスの作成(引数が複数ある場合)【BashとPowerShellの比較】

BashとPowerShellのコマンド対応表に戻る

Bash

コマンド形式

$ alias エイリアス名="コマンド名 引数1 引数2 ... 引数N"

使用例

例として、tmuxに関するエイリアスを記載してみたいと思います。

# エイリアス「ton」を作成
$ alias ton='tmux set-window-option synchronize-panes on'

# エイリアス「toff」を作成
$ alias toff='clear; tmux set-window-option synchronize-panes off'

ちなみに、これらのエイリアス(tontoff)の意味は以下のURLを参照。
tmuxで複数のペインに対して同時にコマンドを実行する
tmuxで複数サーバの同時オペレーション

PowerShell

コマンド形式

存在しない
自作で引数ありのエイリアスを作成します。

引数ありの自作エイリアス関数のフォーマットはかなりコテコテで、以下のように書きます。

Microsoft.PowerShell_profile.ps1
function エイリアス名() {
    コマンド名 引数1 引数2 ... 引数N
}

ただしMicrosoft.PowerShell_profile.ps1というファイルに記載しないと、エイリアスとして有効になりません。

Microsoft.PowerShell_profile.ps1の場所は、以下のコマンドで一発です。

> echo $profile
C:\Users\ユーザ名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

もしDocumentsフォルダ下にWindowsPowerShell\Microsoft.PowerShell_profile.ps1が無かったら、フォルダごと自分で作っちゃえばOKです

使用例

例として、PowerShellからWordを起動するエイリアスを記載してみたいと思います。

Microsoft.PowerShell_profile.ps1
# Wordを開く
function word() {
    $WORD_PATH = "C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE"

    if ( $args ) {
        # 開きたいファイルがある場合
        Start-Process $WORD_PATH $args
    }
    else {
        # 単にWordだけを起動したい場合
        Start-Process $WORD_PATH
    }
}



003.png

エイリアス作成後は、Microsoft.PowerShell_profile.ps1.(ドット)で読み込ませます。

$profileMicrosoft.PowerShell_profile.ps1ですよ!!

> . $profile    # 「.(ドット)」で読み込み

ちゃんとエイリアスが作成できれば、PowerShellでwordを実行するだけで、Wordが起動します。

word_alias.gif

エイリアス専用のファイルとして分けたい場合

【ここをクリックして開く】エイリアス専用のファイルとして分ける
  • まず、エイリアス専用のファイルを作ります。
    ここではpowershell_aliases.ps1Microsoft.PowerShell_profile.ps1と同じフォルダ下に作成します。

000.png


  • 続いてMicrosoft.PowerShell_profile.ps1を開きましょう。
> vim $profile

# vimが無い人は「notepad」で開きましょう!!
> notepad.exe $profile


  • Microsoft.PowerShell_profile.ps1にエイリアス専用のファイルpowershell_aliases.ps1を読み込ませます。
    エイリアス専用ファイルの場所は絶対パスで指定しましょう。
Microsoft.PowerShell_profile.ps1
# エイリアス専用ファイルの読み込み
$ALIASES = "C:\Users\ユーザ名\Documents\WindowsPowerShell\powershell_aliases.ps1"
. $ALIASES    # 「.(ドット)で読み込ませます」

001.png


  • エイリアス専用ファイルpowershell_aliases.ps1に、お好きなエイリアスを作って行きます。
> vim "C:\Users\ユーザ名\Documents\WindowsPowerShell\powershell_aliases.ps1"

# または notepad で開く

> notepad.exe "C:\Users\ユーザ名\Documents\WindowsPowerShell\powershell_aliases.ps1"


002.png


  • 最後にMicrosoft.PowerShell_profile.ps1.(ドット)で読み込ませて、エイリアスを反映させます。
    powershell_aliases.ps1ではなくMicrosoft.PowerShell_profile.ps1を読み込ませます。
> . $profile    # 「.(ドット)」で読み込み

終わり。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む