プロが教えるわが家の防犯対策術!

Mac OSにQt Creatorをインストールしてアプリケーションソフトを作成しようとしています。
その中でディスクの権限を変更しないといけない処理がありまして、
作成するアプリケーションソフトから行いたいと思っております。
ターミナルでコマンドsudo chmod 777 /dev/rdiskを行えば、出来るのですが、
これだとこの後でパスワードの入力を聞いてきます。
それだと使い勝手が悪いように思います・・・。

この方法以外でQt Creatorで作成するアプリケーションから行える方法はないのでしょうか?
また、Qt CreatorでMac OSのターミナルコマンドを使用するにはどうすればよいのでしょうか。

Macでの開発はまったくの素人で…使い方もよくわからない状態です・・・。

どうか情報をお持ちの方お願い致します。

A 回答 (3件)

QProcessでsudoを実行するで良いんでは。



osascriptを挟むとか、いっそsetuidするとかありますが、
>sudo chmod 777 /dev/rdisk
これを実行するのが、一番手っ取り早いかと。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
教えて頂いたQProcessを使用してみたんですがダメでした。

下記ようにしてディスク(USBメモリ)を読み込もうとしましたが、
openのところでエラーになってしまっています。
char fileName[256];
memset(fileName, 0, sizeof(fileName));

DriveNo = 4;
sprintf(fileName, "/dev/rdisk%d", DriveNo);

QProcess ddProcess;

ddProcess.start("sudo chmod 777 /dev/rdisk4");
ddProcess.startCommand("sudo chmod 777 /dev/rdisk4");
ddProcess.waitForFinished();

fd = open (fileName, O_RDONLY);
if( fd == -1 )
{
// エラー
}

QFile::FileHandleFlags handleFlags = QFileDevice::DontCloseHandle;

bool bRet = file.open(fd, QIODevice::ReadOnly, handleFlags);
if ( bRet == true )
{
// 処理

file.close();
close( fd );
}

ターミナルでコマンドsudo chmod 777 /dev/rdisk4を実行してから行うとfile.openまで成功します。
それと、QProcessの処理を行った後でターミナルでls -l /dev/r*で確認してみたところ指定したディスクの状態(crw-r-----のまま)は変わっていませんでした。

何か足りない設定などがあるのでしょうか。

お礼日時:2021/11/18 10:20

>教えて頂いたQProcessを使用してみたんですがダメでした。


sudoでパスワード入力してないのでは。※sudoersの設定で不要にもできます。
https://www.bing.com/search?q=qprocess+sudo+inpu …
あと、こちらが参考になるかも。
https://developer.apple.com/library/archive/tech …
    • good
    • 0
この回答へのお礼

回答と情報ありがとうございます。
確かにパスワードの設定は行っておりませんでした。
ただ、ターミナルでsudo chmod 777 /dev/rdiskを行うとパスワードの入力を促されますが、
QProcessでstart("sudo chmod 777 /dev/rdisk4");
としてもパスワードの入力は聞かれませんでした。
QProcessで予めパスワードの設定をしないといけないのかと思い方法を探したのですが、
見つけることが出来ませんでした。
パスワードの入力を行う場合どのように設定したらよいのでしょうか?

また、教えて頂いたsudoersやリンク先の情報を確認したのですが、
これらをどのようにQProcessで行えばよいのかが分かりませんでした。
sudoersはどのようにコマンドを打てばよいのでしょうか。

今回初めてsudoやQProcessを知ったので、どのようなコマンドを使用すればよいのかまったくわかっていない状態です。
macに触れたこと自体初めてでして・・・。

申し訳ございませんがよろしくお願いします。

お礼日時:2021/11/19 16:40

MacもQTも持ってないけど、こんな感じとか:


QProcess p;
p.start( "sudo", QStringList() << "-S" << "chmod" << "777", "/dev/rdiskXX" );
if ( p.waitForStarted() ){
(void)p.write( "パスワード\n" ); p.closeWriteChannel();
(void)p.waitForFinished();
qDebug() << p.readAllStandardError();
} else { qDebug() << "sorry."; }

>sudoersはどのようにコマンドを打てばよいのでしょうか。
visudo https://www.bing.com/search?q=visudo%E3%81%A8%E3 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!